Устранение утечек памяти в PHP

У меня есть PHP-скрипт, который выполняется бесконечно долго (бесконечный цикл основного события), обрабатывает поток входящих твитов из Twitter и сохраняет их в MySQL. Тем не менее, я не могу контролировать использование памяти. Я нашел 3 способа измерить использование памяти:

memory_get_usage() - Отчеты о 4.0 МБmemory_get_usage(true) - сообщает о 7,5 МБexec("ps -o rss -p " . getmypid(), $memOutput); - Сообщает о линейно увеличивающемся числе, которое быстро увеличивается до сотен МБ за 60 минут или менее и продолжает потреблять память до принудительного завершения сценария.

Мои вопросы:

1) В чем практическая разница между этими тремя показателями?

Но в основном:

2) Что это означает, если первые два являются относительно постоянными, но третий метод совершенно неуправляем, как этот?

Кстати, я использую PHP 5.3 с Zend Framework 1.x и большую активность Zend_Db. Скрипт работает под CLI SAPI. Zend_Db_Profiler не используется. У меня также есть второй бесконечно работающий скрипт, который вообще не использует базу данных, а использование памяти постоянно. Так что, похоже, это связано с базой данных, возможно, расширение MySQL, которое использует моя установка PHP, или, возможно, Zend_Db. Я приложил большие усилия в своем собственном коде, чтобы избежать небрежного кэширования объектов, хотя я не делал этого с самим кодом Zend.

Я пытался сделать мой вызов сценарияgc_enable()и работаетgc_collect_cycles() периодически, но это не помогает.

Есть идеи?

редактировать Я намерен профилировать этот код, как только смогу, но между тем я заметил, что даже мои скрипты, которые не касаются БД, также теряют память. Но они делают это гораздо медленнее, что становится очевидным только при сравнении использования памяти в течение нескольких дней.

Ответы на вопрос(1)

Ваш ответ на вопрос