error.log в cgi

dimagolov

Новичок
php-fpm, воркер умирает по SIGXFSZ

Готовлю переезд сайта с apache + mod_php на nginx + php-cgi (вернее уже на php-fpm). Собрал, вроде как работает (например phpmyadmin). А вот с главным индексам проблема, чего-то ему не хватае и php валится. Пока юзал нативный php-cgi он вообще валился молча всем деманом и давай валяться, сейчас fpm сдержанно ругается в лог:
Aug 20 13:43:30.723449 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Aug 20 13:43:30.723508 [WARNING] fpm_children_bury(), line 215: child 9054 (pool default) exited on signal 25 SIGXFSZ after 174.556630 seconds from start
Aug 20 13:43:30.724450 [NOTICE] fpm_children_make(), line 352: child 9162 (pool default) started
nginx пишет в лог
2009/08/20 13:43:30 [error] 29346#0: *384 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: bmwclub.ua, URL: "/", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1:60088"
в тот лог, который прописан как error_log в php.ini ничего не пишется, все идет через stderr в лог nginx-а.

Собственно вопроса 2:
1. это в принципе error_log в cgi режиме не работает, или все же настраивается, например в конфиге fpm?
2. как можно понять от чего валится воркер php?
 

ys

отодвинутый новичок
php-fpm.conf:
Код:
<section name="global_options">
                <value name="error_log">/bla/bla/bla</value>
Оно?
 

dimagolov

Новичок
ys, первая цитата как раз из этого лога.

-~{}~ 20.08.09 09:21:

просто стандартный вывод ошибок идет не в лог-файл, а в stderr, который по cgi протоколу отдается серверу. но когда воркер валится, то ничего не долетает до сервера и даже если что-то и было в stderr, оно безвозвратно теряется. то есть задача заставить php-fpm сливать ошибки не в stderr, а в лог, тогда и понять ответ на 2-й вопрос будет проще.
 

ys

отодвинутый новичок
Ясно.

По второму вопросу только могу сказать, что-то где-то с лимитами, исходя из:

signal.h:#define SIGXFSZ 25 /* exceeded file size limit */
 

dimagolov

Новичок
типа что, вывод скрипта слишком большой и не вмещается в буфер?
 

ys

отодвинутый новичок
Интересно, а кто загасил php-fpm 25'м сигналом. nginx этого не далает, сам себя он тоже не может загасить.
Может в логах syslogd есть что по этому поводу.
 

dimagolov

Новичок
в message.log ничего, в момент запроса пишутся 3 лога:
-rw-r--r-- 1 root root 12236289 Aug 20 16:53 nginx.site.access.log
-rw-r--r-- 1 root root 83789 Aug 20 16:53 nginx.site.error.log
-rw------- 1 root root 1936 Aug 20 16:53 php-fpm.log
-~{}~ 20.08.09 10:55:

сам себя он тоже не может загасить.
вообще или этим сигналом? разве родительский процесс php-fpm не может загасить воркера? как тогда работает request_slowlog_timeout? сам воркер завершает обработку скрипта?
 

Макс

Старожил PHPClub
1. проверь что php-fpm использует правильный php.ini (выведи phpinfo и посмотри там путь к php.ini)
2. проверь что есть права на запись в error.log для php и что error_log для php-кода - это не php-fpm.log (судя по тому что ты показал - в него может писать только root, а пхп-процессы в fpm работают от какого-то другого юзера)
 

dimagolov

Новичок
таки да, проблем с error_log было 2:
1. надо было создать файл лога, php его создавать не хотел (хотя почему и как делать ротацию?)
2. надо было поменять ему владельца на того юзера, от которого работают воркеры
сейчас буду смотреть не меняет ли скрипт дефолтный error_log на что-то другое, потому что когда воркер валится, все равно ничего в логе нету (хотя обычные notice там наблюдаю)

-~{}~ 20.08.09 11:27:

кстати, с апачем была та же фишка, в дефолтный /var/log/phperror.log ошибки не писались потому что прав дочерним httpd не хватало в него писать

-~{}~ 20.08.09 11:43:

посмотрел, в кастомный лог скрипта (который задается через ini_set('error_log',ErrorLogFile);) тоже ничего не пишется :(

-~{}~ 20.08.09 18:19:

Собственно воркер тушился по SIGXFSZ потому что файл, в который писался кастомный лог ошибок (error_log) превышал 2Gb, чего php вроде как не поддерживает. Интересно, что в mod_php из-под апача это не создавало никаких проблем.
 

Макс

Старожил PHPClub
писался кастомный лог ошибок (error_log) превышал 2Gb, чего php вроде как не поддерживает.
2 gb - это, насколько я помню, ограничение libc
http://linuxmafia.com/faq/VALinux-kb/2gb-filesize-limit.html
 
Сверху