Как я могу контролировать использование памяти php в Linux?
Я использовал инструмент valgrinds massif для мониторинга использования памяти в прошлом.
Кто-нибудь знает, как захватить использование памяти php-процессов, созданных на сервере linux lighttpd?
Я обнаружил, что Valgrind не может присоединяться к процессу preerunning (и я бы не знал PID процесса php до того, как он был в любом случае)
Я вижу только использование памяти lighttpd, а не процессы PHP, которые порождаются модулем lighttpd cgi.
Спасибо заранее.
Ответы
Ответ 1
У PHP есть собственные функции тестирования памяти, я не знаю, может ли это быть вам полезно, но если вы просто хотите его зарегистрировать, вы можете использовать:
http://php.net/manual/en/function.memory-get-peak-usage.php
echo "Using ", memory_get_peak_usage(1), " bytes of ram.";
Ответ 2
Вы не можете использовать инструмент "ps"?
$ ps -F -C php-cgi
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
http 10794 10786 0 4073 228 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10795 10794 0 4073 28 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10796 10786 0 4073 228 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10797 10796 0 4613 3544 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
...
RSS - это размер Real-memory (резидентный набор) в килобайтах процесса.
Суммировать все это в bash (немного ржавый извините)
#!/bin/bash
total=0
for i in `ps -C php-cgi -o rss=`
do
total=$(($total + $i))
done
echo "Memory usage: $total kb"
# Output: Memory usage: 4540 kb
Один вкладыш:
total=0; for i in `ps -C php-cgi -o rss=`; do total=$(($total+$i)); done; echo "Memory usage: $total kb";
Я знаю, что надежность части памяти в ps поставлена под сомнение, но по крайней мере она дает вам представление о том, что такое использование.
Ответ 3
Помимо встроенных команд, показанных выше, вы можете использовать XHProf для профилирования ваших скриптов и XHGui для отображения результатов профилирования в приложении с хорошим браузером. Вы получаете подробную информацию о том, как ваши методы используют память и каковы пики использования памяти в вашем приложении.
Ответ 4
http://php.net/manual/en/function.memory-get-usage.php
Должен предоставить вам объем памяти, который использует поток из самого script. Я думаю, потому что script (и поток) существует только в течение нескольких миллисекунд - всего лишь время, затрачиваемое на создание страницы - уловка за пределами PHP может быть затруднительной.
Вы также можете получать отладочную информацию с сервера, который может быть более точным - я использую xdebug лично, и когда он выдает сообщение об ошибке/уведомлении, он дает вам трассировку стека, время и использование памяти. Вы можете запустить его в конце script с помощью:
trigger_error ('Finished', E_USER_NOTICE);
И это даст вам информацию. Я не уверен, что поймаю данные - если вам нужно, чтобы в документах была функция в том, как - я смутно помню, что видел ее.