2016-04-24 13 views
1

LogstashのキューとSensuのデータベースとして機能するRedisインスタンスがあるので、LogstashはRedisに提出されたレートでログし、Sensuは最新の測定値のみを保存します。しかし、私はRedisの上のメモリ使用量を確認し、実行時に、あると言う:Redis RDBのメモリ使用量(716MB)よりも小さい

[email protected]:/data# redis-cli info | grep memory used_memory:751751344 used_memory_human:716.93M used_memory_rss:774729728 used_memory_peak:754163560 used_memory_peak_human:719.23M used_memory_lua:154624

しかし、私はdump.rdbファイルのサイズを確認するとき、それは言う:

[email protected]:/data# ls -lah total 212K drwxr-xr-x 2 redis redis 4.0K Apr 24 08:22 . drwxr-xr-x 49 root root 4.0K Apr 21 06:07 .. -rw-r--r-- 1 redis redis 203K Apr 24 08:22 dump.rdb

Logstashがいるようですうまくいく。ログは木場に流れており、Grafanaへの指標です。

database,type,key,size_in_bytes,encoding,num_elements,len_largest_element 0,list,"topbeat",797811,linkedlist,1686,986

しかし、797811のバイトがある:私はrdb -c memory dump.rdbを実行すると

は、私は非常に少ないメモリを使用するキーの多くを得る、唯一topbeatキーは(私はメトリックを収集するためtopbeatを使用)大きなメモリを使用しています依然として779KBです。

なぜ、レディスはまだそのすべてのメモリを占有していますか?そのメモリ使用量は、最後の〜2200分間〜300KB /分の速度で着実に増加しています。

ここではいくつかのログ:そのメモリにロードされたとき

1:M 24 Apr 08:22:07.312 * 10000 changes in 60 seconds. Saving... 1:M 24 Apr 08:22:07.333 * Background saving started by pid 5648 5648:C 24 Apr 08:22:07.346 * DB saved on disk 5648:C 24 Apr 08:22:07.362 * RDB: 1 MB of memory used by copy-on-write 1:M 24 Apr 08:22:07.449 * Background saving terminated with success 1:M 24 Apr 08:25:07.403 * 10000 changes in 60 seconds. Saving... 1:M 24 Apr 08:25:07.427 * Background saving started by pid 5657 5657:C 24 Apr 08:25:07.462 * DB saved on disk 5657:C 24 Apr 08:25:07.473 * RDB: 1 MB of memory used by copy-on-write 1:M 24 Apr 08:25:07.527 * Background saving terminated with success 1:M 24 Apr 08:29:07.375 * 10000 changes in 60 seconds. Saving... 1:M 24 Apr 08:29:07.391 * Background saving started by pid 5660 5660:C 24 Apr 08:29:07.419 * DB saved on disk 5660:C 24 Apr 08:29:07.433 * RDB: 1 MB of memory used by copy-on-write 1:M 24 Apr 08:29:07.492 * Background saving terminated with success 1:M 24 Apr 08:33:07.372 * 10000 changes in 60 seconds. Saving... 1:M 24 Apr 08:33:07.396 * Background saving started by pid 5661 5661:C 24 Apr 08:33:07.423 * DB saved on disk 5661:C 24 Apr 08:33:07.435 * RDB: 2 MB of memory used by copy-on-write 1:M 24 Apr 08:33:07.496 * Background saving terminated with success

答えて

0

RDBファイルのサイズは、同じデータの異なる表現です。あなたはRedisののポイントはできるだけデータアクセス時間を最適化されたメモリと連携する必要がある場合

、データが優先度がアクセス時間であるような方法で編成されてもよいことが起こり得ます。

Redisがディスク(RDBファイル)にスナップショットを実行するときに、Redisはファイルを処理できず、そのデータはバックグラウンドプロセスつまり、すべての書き込み操作は最初にメモリにあるに保存され、何か問題が発生した場合、データ全体がディスクにヒットするという完全な保証はありません。

+0

ありがとうございます。しかし、メモリ使用量の増加を防ぐために何をすべきか提案はありますか?この方法を数日間続けても、仮想マシンには空きメモリがもうありません。 – Peter

+0

@Peter私は、それが使用される前にメモリを予約するために内部のハッシュテーブルのような寓意に結びついているものと考えています。 –

+0

@Peter http://redis.io/topics/configのMax Memoryセクションを参照 –

0

Redisは、多くのキー値ストアのように、キーが削除されるとメモリを解放しません。 Redisの実際のメモリ使用量は基本的にピークメモリ使用量です。

詳細については、メモリ割り当てセクションredis documentationを確認してください。

+0

Redisがキーを削除してもメモリが解放されていないことを読んだが、新しいキーにそのメモリを再利用したと思った? Redisへの入力は安定しているので、同じ量のキーが削除されて挿入されるため、メモリ使用量が連続的に増加することは期待できません。 – Peter