Ich habe festgestellt, es gibt einen großen Unterschied zwischen dem top
oder ps
Berichte als Speicherverbrauch für einen PHP-Prozess, im Vergleich zu dem, was der Prozess selbst denkt (memory_get_usage
).Wie viel Speicher verwendet PHP tatsächlich?
Wie viel Speicher wird tatsächlich verwendet?
Wenn Sie den folgenden Code zusammen mit einem meines apps:
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);
Der Ausgang an einer beliebigen Stelle war:
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
In meinem speziellen Fall, das ist ein Problem, weil ich Ich betreibe einige Arbeiter und Dämonen.
Wenn ich das PHP-Speicherlimit auf z. 128 MB für jeden dieser Daemons, die Prozesse werden nur getötet, wenn sie 128 MB erreichen, entsprechend den eigenen Messungen von PHP. Gemäß der ps
werden die Prozesse zu dieser Zeit jeweils etwa 200 MB verwenden.
Danke @bwoebi Diese und Ivo's Antwort haben uns einen ausreichenden Einblick in das Problem gegeben um das Problem zu lösen. – Robbert