Почему результат php memory_get_peak_usage сильно отличается от размера памяти, который показан как выделенный для обработки при использовании команд «top» или «ps» в Linux?
Я установил 2 Mb памяти_limit в php.ini Мой однострочный php-скрипт с
echo memory_get_peak_usage(true);
говорит, что он использует 786432 байта (768 Kb)
Если я попытаюсь спросить систему о текущем процессе php
echo shell_exec('ps -p '.getmypid().' -Fl');
это дает мне
FS UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD 5 S www-data 14599 14593 0 80 0 - 51322 pipe_w 6976 2 18:53 ? 00:00:00 php-fpm: pool www
RSS param – 6976, поэтому использование памяти – 6976 * 4096 = 28573696 = ~ 28 Мб
Откуда появился 28 МБ и есть ли способ уменьшить размер памяти, который используется процессом php-fpm?
Размер памяти в основном используется самим процессом PHP. memory_get_peak_usage()
возвращает память, используемую вашим конкретным скриптом. Способы уменьшить накладные расходы памяти – удалить количество расширений, статически компилировать PHP и т. Д. Но не забывайте, что вилка php-fpm (should) и что большая часть использования памяти, которая не отличается от процесса PHP, находится в общий факт (пока он не изменится).
Сам PHP может быть установлен только на ограничение в 2 миллиона, но он работает WITHIN для дочернего процесса Apache, и этот процесс будет иметь гораздо больший объем памяти.
Если вы запускали скрипт из командной строки, вы могли бы использовать память PHP самостоятельно, так как она не была завершена в Apache и работает сама по себе.
Пиковое использование памяти используется только для текущего скрипта.