mfl

mfl
Рейтинг
134
Регистрация
16.10.2006

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

С переодичностью в 900 секунд проверялась память в самом скрипте:

Значения параметров

memory_get_usage() колебалось в пределах 524996 - 650544

memory_get_usage(true) колебалось в пределах 1572864 - 2359296

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

Командой top отслеживалась потребляемая процессом php-cgi память.

Наблюдалось постепенное увеличение потребляемой процессом памяти, которое заканчивалось поглащением всей свободной оперативной памяти (~300mb)

У кого нибудь, есть предположения в пречинах такой утечки памяти и как с этим можно бороться?

Спасибо.

расширения:

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

memory_limit = 32M ;

netwind, так в memory_limit установлено 32 mb, а процесс потребляет примерно 300 mb

Поставьте для начала в скрипте переодический вывод memory_get_usage(0)

Сейчас буду проверять, спасибо за подсказку.

А он так делает только если по крону стартует или если руками тоже?

Без разницы. Итог один и тот же.

mfl, А что за железка у вас может у вас впс оверселенный до безумия или пароц VIA C3, мы тут не экстрасенсы, озвучьте уж заодно аппарат

VPS: CPU 900 MHZ, Оперативка: 384 Mb

На счет оверселлинга, не замечал, сайты работают быстро.

Смотрите количество переменных в нем и по возможности втыкайте unset() везде.

да так и делаю, в каждой итерации пременные удаляются.

Скрипт скорее всего циклично что-то грабит

Именно так, обновление через CURL. Переменные по завершении итерации удаляются.

В общем. сейчас буду тестить с memory_get_usage(0).

Тогда вопрос, почему скрипт игнорирует значение установленное в memory_limit?

вот я и не знаю, как такое может быть. У меня такая мысль проскочила, что может это процесс ведет какойто лог в памяти, выполняемой работы, хотя, наверное, это абсурд.

Скрипт работает порядка 6 часов (~ 200 секунд процессорного времени), за это время процесс php-cgi с ~10мб возрастает до ~300мб и прерывается, в связи с поглощением всей свободной памяти.

Еще хотел спростиь, memory_limit ограничивает именно память процесса php-cgi? или память скрипта?

во всех переменных скрипта максимум 2 мб, не может он столько жрать. Даже если не делать запросов к БД, потребляемая память не уменьшается.

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

тоже запишусь, сейчас скину данные

Всего: 631