Zauważyłem, że istnieje znaczna różnica między tym, co top
lub ps
zgłasza jako użycie pamięci dla procesu PHP, w porównaniu do tego, co sam proces uważa za użytek (z memory_get_usage
).Ile pamięci faktycznie używa PHP?
Ile pamięci faktycznie wykorzystuje proces?
Kiedy uruchomiony następujący kod wraz z jednym z moich aplikacji:
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);
Wyjście w przypadkowym miejscu był:
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
W moim przypadku jest to problemem, bo” m działa dość wielu robotników i demonów.
Po ustawieniu limitu pamięci PHP na np. 128 MB dla każdego z tych demonów, procesy zostaną zabite dopiero po osiągnięciu 128 MB według własnych pomiarów PHP. Jednak zgodnie z ps
, procesy będą zużywać około 200 MB każdy do tego czasu.
Dzięki @bwoebi Odpowiedź ta i Ivo dały nam wystarczający wgląd w problem rozwiązać problem. – Robbert