Процесс php-cgi жрет память более отведенного лимита

1 23
mfl
На сайте с 16.10.2006
Offline
134
mfl
#21

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 метров

N
На сайте с 06.05.2007
Offline
419
#22

mfl, так и откуда получилось 300мб потребления памяти?

Кнопка вызова админа ()
mfl
На сайте с 16.10.2006
Offline
134
mfl
#23

netwind, так в том то и дело, что поглащаемая память постепенно увеличивается, дополнительно сделаю снимок через пол часа.

mfl добавил 27.02.2009 в 22:14

данные по memory_get_usage приводил выше, они в процессе работы скрипта практически не меняются

N
На сайте с 06.05.2007
Offline
419
#24

mfl, то есть растут именно колонки SIZE и RES ?

mfl
На сайте с 16.10.2006
Offline
134
mfl
#25

vint, и ось и php последние версии

ось - FreeBSD

mfl добавил 27.02.2009 в 22:19

netwind, да именно, ну и само сабой TIME

на данный момент

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND

62866 solomk 1 96 0 50676K 47688K select 0 0:06 0.20% php-cgi
83259 mysql 9 20 0 26372K 23200K kserel 2 37:45 1.56% mysqld
11550 www 1 4 0 18816K 12508K kqread 0 0:05 0.00% httpd
22352 www 1 20 0 18808K 12504K lockf 3 0:03 0.00% httpd
9771 www 1 96 0 18792K 12484K select 3 0:05 0.00% httpd
8875 www 1 20 0 18744K 12488K lockf 2 0:06 0.00% httpd
9619 www 1 96 0 18744K 12460K select 3 0:06 0.00% httpd
83282 root 1 8 0 18368K 11936K nanslp 0 0:05 0.00% httpd
83292 root 1 96 0 17776K 11752K select 3 0:05 0.00% httpd
78205 solomk 1 96 0 14636K 11564K CPU3 2 0:03 0.83% php-cgi
78612 solomk 1 96 0 14320K 11292K select 1 0:01 0.59% php-cgi
61725 root 1 96 0 13964K 9364K select 2 0:01 0.00% ispmgr
56279 root 1 96 0 6280K 2860K select 1 0:00 0.00% sshd
80204 root 1 96 0 6280K 2860K select 0 0:00 0.00% sshd
83130 bind 1 96 0 5824K 4648K select 3 0:01 0.00% named
78541 root 1 96 0 4792K 3732K select 2 0:00 0.00% sendmail
83294 root 1 96 0 4692K 3672K select 2 0:05 0.00% sendmail
56745 root 1 5 0 3976K 2572K ttyin 1 0:00 0.00% csh
80509 root 1 20 0 3976K 2492K pause 1 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
83189 www 1 4 0 2504K 2012K kqread 0 2:44 0.00% nginx
80524 root 1 96 0 2304K 1532K CPU1 2 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 0 0:03 0.00% dovecot
83315 root 1 96 0 1472K 1084K select 0 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 0 0:00 0.00% cron
83123 root 1 96 0 1384K 900K select 3 0:02 0.00% syslogd

mfl добавил 27.02.2009 в 22:23

пришло сообщение с данными memory_get_usage

false - 258537

true - 1836140

mfl добавил 27.02.2009 в 23:17

На данный момент

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND

62866 solomk 1 96 0 128M 125M select 2 0:20 0.73% php-cgi

значения memory_get_usage практически не изменились

mfl
На сайте с 16.10.2006
Offline
134
mfl
#26

Как и ожидал, скрипт окончил работу при поглащении всей свободной памяти.

Никаких предположений нет, из-за чего происходит утечка.

N
На сайте с 06.05.2007
Offline
419
#27

Да, хорошо было бы, если бы пришел опенсорсный дедмороз и бесплатно починил.

Если проблема в самом curl - то одна дорога писать в curl-and-php http://cool.haxx.se/mailman/listinfo/curl-and-php.

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

Вот, к примеру, в свежих версиях утечку починили:

http://curl.haxx.se/mail/lib-2009-02/0124.html

mfl
На сайте с 16.10.2006
Offline
134
mfl
#28

netwind, спасибо за ответы, буду искать проблему.

mfl добавил 01.03.2009 в 18:27

Короче, нашел причину. Все дело в функции strtotime. Без преобразовавыния даты, процесс не увеличивает размер потребляемой памяти.

Для того, чтобы на 100% убедиться в своих выводах, запустил скриптик

<?php

while(true) { $t = strtotime('03.02.2009, 01:04'); }
?>

Процесс занял всю свободную память (300 мб) практически за 20 сек. и завершился.

Теперь надо думать, как это можно исправить.

mfl добавил 01.03.2009 в 18:42

Да собственно, все понятно. Стоял PHP v 5.2.8

Нашел информацию по PHP v 5.2.9

...

Исправлена ошибка #46889 (Утечки памяти в strtotime())

vint, если б удилил должное внимание Вашему вопросу, возможно решил бы раньше эту проблему.

Всем спасибо за помощь.

1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий