Tôi nhận thấy có sự khác biệt giữa báo cáo top
hoặc ps
là mức sử dụng bộ nhớ cho quy trình PHP, so với quá trình tự nghĩ rằng quá trình sử dụng (với memory_get_usage
).PHP thực sự sử dụng bao nhiêu bộ nhớ?
Quá trình thực sự sử dụng bao nhiêu bộ nhớ?
Khi chạy đoạn mã sau cùng với một trong những ứng dụng của tôi:
echo "Memory usage: " . pretty_bytes(memory_get_usage()) . PHP_EOL;
echo "Peak memory usage: " . pretty_bytes(memory_get_peak_usage()) . PHP_EOL;
echo "'Actual' memory usage: " . pretty_bytes(memory_get_usage(true)) . PHP_EOL;
echo "'Actual' peak memory usage: " . pretty_bytes(memory_get_peak_usage(true)) . PHP_EOL;
$ps_output = exec("ps --pid " . getmypid() . " --no-headers -o rss");
echo "'Memory usage according to ps: " . pretty_bytes(intval($ps_output) * 1000);
Sản lượng tại một điểm ngẫu nhiên là:
Memory usage: 4.77 MB
Peak memory usage: 4.99 MB
'Actual' memory usage: 5.00 MB
'Actual' peak memory usage: 5.00 MB
Memory usage according to ps: 17.66 MB
Trong trường hợp đặc biệt của tôi, đây là một mối quan tâm vì tôi m chạy khá một vài công nhân và daemon.
Khi tôi đặt giới hạn bộ nhớ PHP thành ví dụ: 128 MB cho mỗi daemon này, các quá trình sẽ chỉ bị giết khi chúng đạt 128 MB theo các phép đo của PHP. Tuy nhiên, theo ps
, các quy trình sẽ sử dụng khoảng 200 MB mỗi lần đó.
Cảm ơn @bwoebi. Câu trả lời này và Ivo đã cho chúng tôi một mức độ thấu đáo đầy đủ về vấn đề này để giải quyết vấn đề trong tầm tay. – Robbert