株式会社ミクシィの前坂です。前回はmemcached 1.
statsの機能強化
memcachedには以前からstatsというコマンドがあり、
- デーモンの起動オプション
- スラブ単位でのアクセス記録
- 削除処理
- インクリメント、
デクリメント処理 - CAS処理
- 重いリクエストを含んだ通信の記録
デーモンの起動オプションを取得する
キャッシュクラスタの運用者は何台もの物理サーバを管理する必要があり、
Connected to localhost.
Escape character is '^]'.
stats settings
STAT maxbytes 67108864
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 11211
STAT inter NULL
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 5
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
END
スラブ単位でのアクセス記録
memcachedのキャッシュメカニズムにはスラブというさまざまのレコードサイズに対応したキャッシュ可能領域
slabの状態を調べる
- get_
hits (レコードの取得に成功した回数) - cmd_
set (書き込みに成功した回数) - delete_
hits (削除処理を行った回数) - incr_
hits (インクリメント処理が成功した回数) - decr_
hits (デクリメント処理が成功した回数) - cas_
hits (CAS更新に成功した回数) - cas_
badval (識別子のミスマッチによりCAS更新に失敗した回数)
上記の情報はすべてのスラブに対して個々に保持されます。このように細かくどうmemcachedのデーモンがアクセスされているかの情報を取得することにより、
削除処理の統計
レコードの削除が成功、
- delete_
hits - delete_
misses
delete_
インクリメント、デクリメント処理の統計
memcachedは整数を値とした既存のレコードに対して、
まずは0を値とした元値をキャッシュする
set point 0 0 1
0
STORED
次に1を加算する(戻り値は加算された値)
incr point 1
1
100で加算する
incr point 100
101
値を50で引算する
decr point 50
51
上記の通り、
さて、
- incr_
hits (インクリメントに成功した回数) - incr_
misses (インクリメントに失敗した回数) - decr_
hits (デクリメントに成功した回数) - decr_
misses (デクリメントに失敗した回数)
アプリケーションでmemcachedをつかった数値系の不整合を発見した際にこの情報を使ってデバッグに役立てることができます。
CAS処理の統計
memcachedはスレッド―セーフな設計ですが、
識別子が変更されていた場合はレコードの状態が変わっているので、
今回の統計システム強化にはCAS系の取得可能な情報が3つ追加されました。
- cas_
hits (CASを使った更新の成功回数) - cas_
misses (与えられた鍵に該当するレコードが存在しなかった回数) - cas_
badval (レコードの状態が変更したことにより更新が失敗した回数)
重いリクエストを含んだ通信の記録
memcachedは起動時に-Rオプションを指定することで、
特定のクライアントにデーモンを独占されるというケースは、
新たに
複数台の統計情報を取得する
システム運用者は、
- クラスタにキャッシュされているレコードの平均サイズ
- メモリの使用量がもっとも高いノード
- 使用可能のメモリ残量がもっとも低いノード
- 生存期間
(uptime) がもっとも長いノード - クラスタから取得できたキャッシュのヒット率
以下が3台のサーバに対してクラスタ分析機能を使った例です。
$ memstat --servers=server1,server2,server3 --analyze
Memcached Cluster Analysis Report
Number of Servers Analyzed : 3
Average Item Size (incl/overhead) : 0 bytes
Node with most memory consumption : server1 (57 bytes)
Node with least free space : server1 (67108864 bytes remaining)
Node with longest uptime : server1 (220s)
Pool-wide Hit Ratio : 100%
次回予告
さて、