2012-03-29 4 views
1

PHPで作業しており、memcached v1.4.6をキャッシュに使用しています。私たちはPECLからmemcache-2.2.6というmemcache拡張を使用しています。我々は、永続的な接続を使用してmemcachedに接続しています。PHPのmemcacheはキーの数が増えるとfalseを返します

最近、memcachedに格納されているキーの数が2倍に増えました。これらのキーの長さは最大75〜80文字です。格納される値は整数です。

新しいコードで作業するたびに、システムは最初の数秒間(通常は10秒未満)正常に動作します。最初の数秒後、memcacheはすべての要求(get、set、increment)に対して "false"を返すようになります。

この段階で古いコードに戻すと、もう一度正常に動作します。

私たちのmemcachedサーバーの要求速度は、1秒あたり約270要求(古いコード)です。これは、新しいコードで毎秒1000リクエスト以上に増加すると予想されます。

memcacheが "false"を返し始めると、割り当てられたメモリの約15%が空きです。

この現象の原因は何ですか?

+0

memcachedサーバを起動するために使用するコマンドは何ですか?たぶんそれは最大のメモリの問題です、あなたはそれが全体的なOSのメモリ、またはちょうどmemcachedのために割り当てられたメモリですか? – capi

+0

次のコマンドを使ってmemcachedサーバを起動します: '/ usr/bin/memcached -d -m 2048 -u root'。 "false"を返すようになると、memcachedに割り当てられたメモリの15%が解放されます。もし私が間違っていれば私を修正してください。しかし、空きメモリがなかったとしても、memcachedは 'set'コマンドを発行したときに古いアイテムを追い出すべきではありません。このような場合、 'set'に対する応答は' false'であってはなりません。ありがとう。 – Nikhil

+0

muninまたはphpmemcachedadminを使って追い出し率を調べてみてください(本当に簡単にインストールできます、下の記事のリンクを参照)。 memcached内で何が起こっているのかについてより多くの情報を提供するかもしれません。また、スラブをドリルダウンして、格納されているアイテムとその値を確認することもできます。最後の手段として、Memcachedライブラリを使用してみてください。ランタイムオプションが多く、コードも似ています。すでにラッパーがあれば大きな変化にはならないかもしれません。 – capi

答えて

1

圧縮またはシリアル化の問題の可能性があります。サーバーの正確な応答を確認するために、さらにデバッグを行うことをお勧めします。まず、telnetや設定を行うと、手動でキーを取得してみてください。

telnet a.b.c.d 11211 
SET key_name 0 300 3 
123 
STORED 
GET a 
VALUE a 0 3 
123 
END 

参照:プロトコルコマンドのための

http://code.google.com/p/memcached/wiki/NewCommandshttp://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

を。

すべてがうまく見える場合は、実行中のコマンドを参照して、サーバー上のモニターを試みることができる:

telnet a.b.c.d 11211 
STATS detail on 
//wait a while 
STATS detail off 
STATS detail dump 
//list of commands will be dumped 

あなたはphp.iniにその実行時設定でライブラリを少し微調整することができます

http://www.php.net/manual/en/memcache.ini.php

PHPのMemcached(Dに注意してください)ライブラリを選択することもできます。

また、優れた監視ツール:

http://code.google.com/p/phpmemcacheadmin/

+0

お返事ありがとうございます。 telnetインターフェースを使ってmemcacheのキーを 'set '/' get'することができました。 'STATS detail dump'は非常に少数のコマンドを表示します(19)。接頭辞はキーに付いています。 PHPログには、同じ時間に数千のコマンドが表示されます。 – Nikhil

関連する問題