2009-10-12 20 views
11

ps -auxを使用すると、ストレージ容量がサーバーメモリの約30%を占めていることに気づいているので、私のmemcacheをクリアしようとしています。Memcacheはメモリをフラッシュまたはクリアしません

私は次のPHPコードを実行しました。

 
$memcache = new Memcache; 
    $memcache->connect("localhost",11211); 
    $memcache->flush(); 
    print_r($memcache->getStats()); 

これはこれはかなり基本的である必要がありますが、明確に、私は何かが欠けてい

(
    [pid] => 4936 
    [uptime] => 27318915 
    [time] => 1255318611 
    [version] => 1.2.2 
    [pointer_size] => 64 
    [rusage_user] => 9.659531 
    [rusage_system] => 49.770433 
    [curr_items] => 57864 
    [total_items] => 128246 
    [bytes] => 1931734247 
    [curr_connections] => 1 
    [total_connections] => 128488 
    [connection_structures] => 17 
    [cmd_get] => 170288 
    [cmd_set] => 128246 
    [get_hits] => 45464 
    [get_misses] => 124824 
    [evictions] => 1009 
    [bytes_read] => 5607431213 
    [bytes_written] => 1806543589 
    [limit_maxbytes] => 2147483648 
    [threads] => 1 
) 

の出力になります。

答えて

16

実際にmemcached設定を変更して、メモリを使い切らないようにする必要があります。 memcachedを起動すると、-mフラグを使用して、メモリ使用量をメガバイト単位で渡すことができます。詳細は、its documentationを参照してください。

flushは、キャッシュ内のすべての項目を無効にするだけで、memcachedに使用中のメモリの割り当てを解除または予約解除するようには指示しません。 memcachedに、使用しているメモリの割り当てを解除するように指示することはできません。

+0

ありがとうございました。それはそれを明らかにする。私は意図的にmemcacheにたくさんの記憶を与えましたが、明らかに必要以上に多くの記憶を与えました。 より低い設定でmemcacheを再起動します。 – pedalpete

+0

ようこそ。 –

+0

これはまだ有効な質問です。私はMagentoのためにmemcacheサーバーを使用する共有環境にあり、上記はうまくいかないようです!私はサーバーを再起動する特権を持っていないが、汚れたキャッシュは、私のサイトが正しく動作する前に行く必要があるので、私はファイルキャッシュが残っている。 – ColinM

11

Colin、 Flush Allコマンドは、キャッシュにすべての実験時間を現在の値に設定します。 既存のキーの次の要求は何も戻さず、レコードはキャッシュから削除されます。 Memcachedは期限切れのアイテムをクリーニングするための別個のプロセスを持たず、プロセスを非常に軽量かつ効率的にする「レイジー」メソッドを使用するため、実際にキャッシュを削除してから唯一の実際の方法Memcachedを再起動することです。長い作業では、すべてのキーをダンプし、すべてのコマンドをフラッシュしてから、各キーを繰り返し実行してレコードを削除します。この方法がうまくいくとすれば、私は100%知りませんが、理論的にはそう考えられます。

-5

この

メイジを試してみてください::アプリ() - > getCacheInstance() - > getFrontend() - > getBackend() - >クリーン(Zend_Cacheの:: CLEANING_MODE_ALL)。

2

memcacheをクリアしてから1秒以上待つ必要があります。そうでなければ、1秒未満で追加された項目は無効になります。

例:この記事で

$memcache->flush(); 

$time = time()+1; //one second future 
while(time() < $time) { 
//sleep 
} 
$memcache->set('key', 'value'); // repopulate the cache 

見て、memcache flush issue

+0

これは私を助けましたが、使用する代わりに 'sleep(1)' を使用することができました。これはより多くのCPUが使いやすく、もちろん読みやすいです。 – Roey

0

は実際には、すべての値の割り当てを解除する最も簡単な方法は、再起動memcachedのインスタンスです。

+0

これは良い考えではありません。非常にビジーなウェブサイトをお持ちの場合は、memcacheを再起動すると実際に問題が発生する可能性があります。たとえば、私は1,000人の訪問者が並んでいるWordpressサイトを運営しています。私がmemcacheクラスタを再起動すると、MySQLバックエンドはデータを十分に高速に処理できず、WordPressは新しいインストールを考えるようになります。可能であれば、常にフラッシュしてください。他の選択肢がない場合にのみ再起動します。 – frustratedtech

+0

同意すると、あなたはいつもあなたがしていることを知る必要があります。 – mulya

関連する問題