LINUX.ORG.RU
ФорумAdmin

PHP-FastCGI, скапливаются процессы


0

1

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

# php-cgi -v
PHP 5.2.14 (cgi-fcgi) (built: Aug 27 2010 16:36:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
    with the ionCube PHP Loader v4.0.1, Copyright (c) 2002-2010, by ionCube Ltd., and
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies


# php-cgi -m
[PHP Modules]
bz2
calendar
cgi-fcgi
ctype
curl
date
dbase
dom
exif
filter
ftp
gd
gettext
gmp
hash
iconv
imap
ionCube Loader
json
ldap
libxml
mbstring
mcrypt
mysql
mysqli
ncurses
odbc
openssl
pcntl
pcre
PDO
pdo_mysql
PDO_ODBC
pdo_sqlite
posix
readline
Reflection
session
shmop
SimpleXML
snmp
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend Optimizer
zip
zlib

[Zend Modules]
Zend Optimizer
the ionCube PHP Loader

CentOS 5.5


А есть что интересного в местном аналоге /var/log/kern.log, касающееся php-cgi?

Как запускаете php-cgi, чему равны значения PHP_FCGI_CHILDREN и PHP_FCGI_MAX_REQUESTS?

sjinks ★★★ ()
Ответ на: комментарий от sjinks

/var/log/kern.log - Not found

Как запускаете php-cgi, чему равны значения PHP_FCGI_CHILDREN и PHP_FCGI_MAX_REQUESTS?

Извините за нубизм, а где их найти?

kmua ()
Ответ на: комментарий от kmua
cat /var/log/messages | grep php-cgi
Dec 12 06:53:11 stan kernel: php-cgi invoked oom-killer: gfp_mask=0x280d2, order=0, oomkilladj=0
Dec 12 06:53:11 stan kernel: Out of memory: Killed process 15156, UID 605, (php-cgi).
Dec 12 06:53:11 stan kernel: OOM killed process php-cgi (pid=15156, ve=0) exited, free=12004 gen=113.
kmua ()
Ответ на: комментарий от kmua

> php-cgi invoked oom-killer

Ну вот и ответ. Похоже на то, что OOM Killer убивает master process php-cgi — который присматривает за дочерними процессами и перезапускает их по мере надобности.

spawn-fcgi, в свою очередь, смотрит за master process (от которого форкаются все остальные). Когда этот мастер гибнет от руки OOM Killer, spawn-fcgi его перезапускает. От него форкается еще 4 процесса. А старые процессы php остаются — их некому прибить.

PS: если возможно, отрубите Zend Optimizer.

sjinks ★★★ ()
Ответ на: комментарий от kmua

А почему он его убивает?

Очевидно потому, что php съел всю доступную память. Отсюда и Out of memory. И жестокость oom killer.

Если не боитесь, можете попробовать что-то вида (от рута):

for i in `ps -C php-cgi -opid | tail -n +2`; do
    echo -17 > /proc/$i/oom_adj
done

Перед этим обязателен к прочтению man 5 proc

Где можно проверить PHP_FCGI_CHILDREN

В исходниках spawn-fcgi, но думаю, что параметр -C именно их и задаёт.

sjinks ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.