Как я могу контролировать использование памяти 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 может быть затруднительной.

  • План B

Вы также можете получать отладочную информацию с сервера, который может быть более точным - я использую xdebug лично, и когда он выдает сообщение об ошибке/уведомлении, он дает вам трассировку стека, время и использование памяти. Вы можете запустить его в конце script с помощью:

trigger_error ('Finished', E_USER_NOTICE);

И это даст вам информацию. Я не уверен, что поймаю данные - если вам нужно, чтобы в документах была функция в том, как - я смутно помню, что видел ее.