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%が空きです。
この現象の原因は何ですか?
memcachedサーバを起動するために使用するコマンドは何ですか?たぶんそれは最大のメモリの問題です、あなたはそれが全体的なOSのメモリ、またはちょうどmemcachedのために割り当てられたメモリですか? – capi
次のコマンドを使ってmemcachedサーバを起動します: '/ usr/bin/memcached -d -m 2048 -u root'。 "false"を返すようになると、memcachedに割り当てられたメモリの15%が解放されます。もし私が間違っていれば私を修正してください。しかし、空きメモリがなかったとしても、memcachedは 'set'コマンドを発行したときに古いアイテムを追い出すべきではありません。このような場合、 'set'に対する応答は' false'であってはなりません。ありがとう。 – Nikhil
muninまたはphpmemcachedadminを使って追い出し率を調べてみてください(本当に簡単にインストールできます、下の記事のリンクを参照)。 memcached内で何が起こっているのかについてより多くの情報を提供するかもしれません。また、スラブをドリルダウンして、格納されているアイテムとその値を確認することもできます。最後の手段として、Memcachedライブラリを使用してみてください。ランタイムオプションが多く、コードも似ています。すでにラッパーがあれば大きな変化にはならないかもしれません。 – capi