Memcache :: getStats()
$memcache = new Memcache;
$memcache->connect('localhost',11211);
print_r($memcache->getStats());
典型的なデータセットを返します
Array ( [pid] => 25722 [uptime] => 4487286 [time] => 1308323074 [version] => 1.2.2 [pointer_size] => 64 [rusage_user] => 2646.005365 [rusage_system] => 17108.873237 [curr_items] => 37761 [total_items] => 10764857 [bytes] => 140070186 [curr_connections] => 5 [total_connections] => 17360659 [connection_structures] => 31 [cmd_get] => 89154830 [cmd_set] => 10764857 [get_hits] => 83452021 [get_misses] => 5702809 [evictions] => 0 [bytes_read] => 3527860756618 [bytes_written] => 4234517241183 [limit_maxbytes] => 2147483648 [threads] => 1 )
すべてがうまくいくようです。
memcachedに割り当てられた2 Gbの133.5 Mbと約37000のキーがあることがわかります。
ヒットは、ミスを83/5として扱いますが、これも問題ではありません。
しかし! 私たちが見るものは私たちが必要とするものではありません! (まあ、少なくとも私はそれが必要だった)。 確かに、これらのキーには古いものがあります。 そして、少し先を見ると、「生きている」値よりもさらに多く、通常は10回ごとです(もちろん、ヒキガエルが非常に十分な量のメモリを割り当てようと絞めない限り)。 ガベージコレクターは、次の2つの理由で古い(または古いではない)キーを削除します。
1)空きメモリ不足。 (ここで実際のものは飛び去ることができます)
2)データが要求され、有効期限が切れたことが判明しました。
これには解決策があり、不名誉なことは簡単です。定期的にすべてのキーを調べます。
PHPはこれに最適なオプションではありません。 「身体により近い」ものが欲しかった。
解決されました。 bash / shに書き込み、cronに書き込みます。 私の場合、メインの「ロードされた」時間の終わりに1回の打ち上げで十分です(私たちにとってはモスクワ時間の21〜30程度です)。
サーバーとして-かなりポピーなDebian Lenny。
そのため、libmemcached、そのmemdump(キーの完全なリストの出力)およびmemccat(キーによるデータの要求)、bash / sh、および数分が必要です...
#!/bin/sh
cd /usr/local/src/libmemcached-0.49/clients
./memdump --servers=127.0.0.1 >/home/memdump.dat
while read i; do
memccat $i --servers=127.0.0.1 >/dev/null 2>&1
done </home/memdump.dat
#-----------------------------------------
# ,
#
# - 1 .
# too long....
memkeshで実際に行われている「ライブ」セッションの実際の数を確認すると特に便利です。
追加する必要があります:実稼働サーバーでは、1日1回約850-1000 Mbのキーデータ(割り当てられた2GBから)が削除され、ほとんど常に実際の memcachedステータスデータがあります。