netwind, запустил скрипт, top отсортирован по памяти
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 83259 mysql 9 20 0 26348K 23056K kserel 3 37:25 1.66% mysqld 62866 solomk 1 96 0 21840K 18788K select 0 0:01 0.49% php-cgi 11550 www 1 20 0 18816K 12504K lockf 0 0:05 0.00% httpd 22352 www 1 20 0 18808K 12496K lockf 0 0:03 0.00% httpd 9771 www 1 20 0 18792K 12484K lockf 1 0:05 0.00% httpd 8875 www 1 20 0 18744K 12480K lockf 0 0:05 0.00% httpd 9619 www 1 4 0 18744K 12460K kqread 0 0:05 0.00% httpd 83282 root 1 8 0 18368K 11936K nanslp 2 0:05 0.00% httpd 83292 root 1 96 0 17776K 11752K select 1 0:04 0.00% httpd 62542 solomk 1 4 0 14088K 11248K accept 1 0:03 0.00% php-cgi 62545 solomk 1 4 0 14032K 11192K accept 0 0:03 0.63% php-cgi 61725 root 1 96 0 13964K 9364K select 2 0:01 0.00% ispmgr 56279 root 1 96 0 6280K 2860K select 0 0:00 0.00% sshd 83130 bind 1 96 0 5824K 4648K select 2 0:01 0.00% named 83294 root 1 96 0 4692K 3672K select 1 0:05 0.00% sendmail 56745 root 1 20 0 3976K 2536K pause 2 0:00 0.00% csh 83273 dovecot 1 4 0 2676K 1848K kqread 1 0:00 0.00% pop3-login 83274 dovecot 1 4 0 2668K 1836K kqread 0 0:00 0.00% imap-login 23550 root 1 96 0 2624K 2280K select 0 0:00 0.00% proftpd 83189 www 1 4 0 2512K 2020K kqread 3 2:42 0.10% nginx 66875 root 1 96 0 2332K 1556K CPU1 1 0:00 0.00% top 83188 root 1 20 0 2240K 1644K pause 3 0:00 0.00% nginx 83200 mysql 1 8 0 1728K 1180K wait 0 0:00 0.00% sh 62863 solomk 1 8 0 1708K 1092K wait 0 0:00 0.00% sh 83249 root 1 4 0 1696K 1100K kqread 0 0:01 0.00% dovecot-auth 83247 root 1 4 0 1504K 1016K kqread 1 0:03 0.00% dovecot 83315 root 1 96 0 1472K 1084K select 1 0:01 0.00% inetd 62860 root 1 -8 0 1412K 1060K piperd 1 0:00 0.00% cron 83300 root 1 8 0 1412K 1012K nanslp 1 0:00 0.00% cron 83123 root 1 96 0 1384K 900K select 1 0:02 0.00% syslogd
Процесс PID 62866
При старте скрипта весил примерно 18 метров
.. сообщение добавилось к предыдущему посту
нет, curl_close выполняется, здесь ошибки нет.
mfl добавил 27.02.2009 в 18:04
С переодичностью в 900 секунд проверялась память в самом скрипте:
Значения параметров
memory_get_usage() колебалось в пределах 524996 - 650544
memory_get_usage(true) колебалось в пределах 1572864 - 2359296
При этом значения не менялись по возрастающей, последующие значения могли быть как больше так и меньше текущих.
Командой top отслеживалась потребляемая процессом php-cgi память.
Наблюдалось постепенное увеличение потребляемой процессом памяти, которое заканчивалось поглащением всей свободной оперативной памяти (~300mb)
У кого нибудь, есть предположения в пречинах такой утечки памяти и как с этим можно бороться?
Спасибо.
mfl добавил 27.02.2009 в 18:07
расширения:
Reflection.so
SPL.so
SimpleXML.so
Zend Optimizer.so
cgi-fcgi.so
ctype.so
curl.so
date.so
gd.so
hash.so
iconv.so
imap.so
libxml.so
mysql.so
pcre.so
session.so
standard.so
zlib.so
в процессе работы скрипта curl используется.
но получаемые данные при каждом запросе перезаписываются в одну и ту же переменную.
А еще какие могут быть пречины того, что игнорируется memory_limit?
Если ограничение стоит на 32 мб, следовательно и помереть должен на 32 мб. а он до 300мб доходит, в общем завершается только тогда, когда поглощает всю свободную память.
Server: nginx/0.6.35
Значение устанавливал через панель ISPmanager, файл php.ini располагается в /usr/local/etc/
данные выводимые при помощи функции phpinfo, совпадают со значениями установленными в php.ini
netwind, так в memory_limit установлено 32 mb, а процесс потребляет примерно 300 mb
Сейчас буду проверять, спасибо за подсказку.
Без разницы. Итог один и тот же.
VPS: CPU 900 MHZ, Оперативка: 384 Mb
На счет оверселлинга, не замечал, сайты работают быстро.
да так и делаю, в каждой итерации пременные удаляются.
Именно так, обновление через CURL. Переменные по завершении итерации удаляются.
В общем. сейчас буду тестить с memory_get_usage(0).
Тогда вопрос, почему скрипт игнорирует значение установленное в memory_limit?
вот я и не знаю, как такое может быть. У меня такая мысль проскочила, что может это процесс ведет какойто лог в памяти, выполняемой работы, хотя, наверное, это абсурд.
Скрипт работает порядка 6 часов (~ 200 секунд процессорного времени), за это время процесс php-cgi с ~10мб возрастает до ~300мб и прерывается, в связи с поглощением всей свободной памяти.
Еще хотел спростиь, memory_limit ограничивает именно память процесса php-cgi? или память скрипта?
во всех переменных скрипта максимум 2 мб, не может он столько жрать. Даже если не делать запросов к БД, потребляемая память не уменьшается.
Нарастание потребляемой памяти происходит постепенно, но в самих переменных скрипта обьем памяти не увеличивается.
тоже запишусь, сейчас скину данные