2009-10-12 24 views
11

Tôi đã cố gắng xóa memcache của mình vì tôi nhận thấy dung lượng chiếm gần 30% bộ nhớ máy chủ khi sử dụng ps -aux.Memcache sẽ không xóa hoặc xóa bộ nhớ

Vì vậy, tôi đã chạy mã php sau.

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

Điều này dẫn đến đầu ra của

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

này nên được khá cơ bản, nhưng rõ ràng, tôi là thiếu một cái gì đó.

Trả lời

16

Bạn thực sự cần phải thay đổi cài đặt ghi nhớ để không sử dụng hết bộ nhớ. Khi bạn bắt đầu memcached, bạn có thể vượt qua nó số lượng bộ nhớ nó nên sử dụng, tính bằng megabyte, sử dụng cờ -m. Xem its documentation để biết thông tin.

flush chỉ vô hiệu hóa tất cả các mục trong bộ nhớ cache, nó không lệnh memcached để deallocate hoặc unreserve bộ nhớ nó đang sử dụng. Tôi nghi ngờ rằng bạn có thể lệnh memcached để deallocate bộ nhớ nó đang sử dụng.

+0

Cảm ơn James. Điều đó làm rõ nó lên. Tôi đã cố tình ghi nhớ rất nhiều bộ nhớ, nhưng dường như nhiều hơn là cần thiết. Tôi sẽ khởi động lại memcache với cài đặt thấp hơn. – pedalpete

+0

Bạn được chào đón. –

+0

Đây vẫn là một câu hỏi hợp lệ mặc dù .. Tôi đang trên một môi trường chia sẻ sử dụng một máy chủ memcache cho Magento và có vẻ như là ở trên không hoạt động! Tôi không có đặc quyền để khởi động lại máy chủ nhưng bộ nhớ cache bẩn phải đi trước khi trang web của tôi sẽ hoạt động đúng cách vì vậy trong thời gian tôi bị kẹt với một bộ nhớ cache tập tin. – ColinM

11

Colin, Lệnh tuôn ra Tất cả khiến bộ nhớ cache đặt tất cả thời gian thử nghiệm thành hiện tại. Yêu cầu tiếp theo cho một khóa hiện tại sẽ không trả lại gì và bản ghi sẽ bị xóa khỏi bộ nhớ cache. Vì Memcached không có quá trình riêng biệt để làm sạch các mục đã hết hạn và sử dụng phương thức "Lười biếng" khiến quy trình rất nhẹ và hiệu quả, tuy nhiên vì điều này nếu bạn cần xóa bộ nhớ cache và bắt đầu từ đầu thực hiện việc này là khởi động lại Memcached. Một công việc dài xung quanh sẽ là đổ tất cả các khóa của bạn, Gửi Flush All Command, Sau đó lặp qua mỗi phím chạy một chống lại nó gây ra hồ sơ sẽ được gỡ bỏ. Tôi không biết cho 100% nếu phương pháp này sẽ làm việc nhưng trong lý thuyết âm thanh hợp lý.

-5

Hãy thử điều này

Mage :: app() -> getCacheInstance() -> getFrontend() -> getBackend() -> sạch (Zend_Cache :: CLEANING_MODE_ALL);

2

Bạn cần chờ ít nhất 1 giây sau khi xóa memcache. nếu không thì các mục được thêm vào dưới một giây sẽ vô hiệu hóa chính nó.

Ex:

$memcache->flush(); 

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

Nhìn vào bài này, memcache flush issue

+0

điều này đã giúp tôi, nhưng thay vì sử dụng trong khi bạn chỉ có thể sử dụng 'ngủ (1)' đây là cpu thân thiện hơn và tất nhiên dễ đọc hơn. – Roey

0

Trên thực tế, cách dễ nhất để deallocate tất cả các giá trị là khởi động lại dụ memcached.

+0

Đây KHÔNG phải là ý hay.Nếu bạn có một trang web cực kỳ bận rộn, việc khởi động lại memcache thực sự có thể gây ra vấn đề. Ví dụ, tôi chạy một trang Wordpress với 1.000 khách truy cập đồng thời. Nếu tôi khởi động lại cụm memcache, phần cuối của MySQL không thể phục vụ dữ liệu đủ nhanh và WordPress cho rằng đó là một cài đặt mới. Luôn luôn FLUSH nếu có thể. Chỉ khởi động lại nếu không có lựa chọn nào khác. – frustratedtech

+0

Đồng ý, bạn luôn phải biết mình đang làm gì. – mulya

Các vấn đề liên quan