Memcache floş veya açık bellek olmaz

3 Cevap php

I ps -aux kullanırken sunucu belleği neredeyse% 30 alarak depolama fark ediyorum gibi benim memcache temizlemek için çalışıyorum.

Yani şu php kodu koştu.

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

Bu, çıktı ile sonuçlanır

(
    [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
)

Bu oldukça basit olmalı, ama açıkça, ben bir şey eksik.

3 Cevap

Eğer gerçekten o kadar fazla bellek kullanır kalmaması memcached ayarlarını değiştirmeniz gerekebilir. Eğer memcached başlattığınızda, -m bayrağını kullanarak, megabayt, bunu kullanmak gerekir bellek miktarını iletebilirsiniz. its documentation bilgi için bkz.

flush sadece önbellek tüm öğeleri geçersiz, onu kullanarak bellek ayırması veya unreserve için memcached emretmez. Ben bunu kullanarak bellek ayırması memcached komut şüpheliyim.

Sen memcache temizledikten sonra en az 1 saniye beklemek gerekiyor. Aksi takdirde bir saniye daha az katma ürün kendini geçersiz olacaktır.

Ex:

$memcache->flush();

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

Bu yazı bak, memcache flush issue

Bu deneyin

Mage :: app () -> getCacheInstance () -> getFrontend () -> getBackend () -> temiz (Zend_Cache :: CLEANING_MODE_ALL);