PHP CLI - определить, где моя память тратится впустую - PullRequest
0 голосов
/ 03 февраля 2011

Я использую PHP + Zend Framework для нескольких демонов CLI. Они занимают совсем немного памяти. Я предполагаю, что это может быть вызвано частью Zend Framework, но я хочу иметь факты, показывающие, где память тратится впустую.

Как я могу определить, где память тратится впустую? Это просто процесс проб + ошибка? Также, как я могу улучшить сборку мусора (я читал некоторые статьи, которые также могут быть причиной большого объема памяти).

Ответы [ 3 ]

1 голос
/ 03 февраля 2011

IME, PHP использует огромный объем памяти для анализа кода - попробуйте создать простой скрипт, который не делает ничего, кроме явного включения всех используемых вами библиотек, и отслеживает использование памяти при запуске / завершении.Сравните это с тем, что вы видите в вашем реальном скрипте.

Htbaa частично верен - более поздние версии PHP имеют намного более умный сборщик мусора, однако более ранние версии все еще выполняют сборку мусора - они просто не находятслучаи, которые делает более новый gc.Но из-за его сборки мусора вы обычно увидите что-то вроде пилообразного использования памяти при постоянной загрузке ввода.

Но хорошая сборка мусора не исправит плохой код - если вы что-то сохранили в переменнойкоторого нет в стеке, тогда вам нужно сбросить его, когда вы закончите с ним.

1 голос
/ 03 февраля 2011

Я бы порекомендовал использовать профилировщик XDebug , который должен дать вам необходимые ответы.

Профилировщик создаст файл cachegrind, который вы можете просмотреть в таком инструментекак KCacheGrind, чтобы увидеть узкие места и использование памяти вашей программой.

Узнайте больше на странице профилировщика XDebug: http://www.xdebug.org/docs/profiler

0 голосов
/ 03 февраля 2011

Какую версию PHP вы используете?Только PHP> = 5.3 имеет приличный сборщик мусора.PHP <= 5.2 может съесть всю вашу память, когда используется для запуска скриптов демона. </p>

...