我注意到有什麼top
或ps
報告內存使用了PHP的過程,對比一下過程本身認爲使用(與memory_get_usage
)其之間完全不同。PHP實際使用多少內存?
該進程實際使用多少內存?
當運行下面的代碼與我的應用程序之一沿着:
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);
一個隨機點的輸出是:
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
在我的具體情況,這是一個問題,因爲我m運行了不少工人和守護進程。
當我將PHP內存限制設置爲例如根據PHP自己的測量結果,每個守護進程都有128 MB的空間,這些進程只有在達到128 MB時纔會被殺死。但是,根據ps
,到那時爲止每個進程將使用大約200 MB。
Thanks @bwoebi。這和Ivo的答案讓我們對問題有了充分的瞭解解決手頭的問題。 – Robbert