ID: 50265
User updated by: mg at fork dot pl
Reported By: mg at fork dot pl
-Status: Feedback
+Status: Open
Bug Type: CGI related
Operating System: Linux
PHP Version: 5.2.11
New Comment:
My previous comment shows state BEFORE the problem hits. Many "forking"
messages are because of low MAX_REQUEST limit.
When I attached to the process running inside the endless loop (it was
before recompilation with DEBUG_FASTCGI) I got following bt
#0 0xffffe424 in __kernel_vsyscall ()
#1 0xb712fc6d in __libc_wait (stat_loc=0xbff2d2a4)
at ../sysdeps/unix/sysv/linux/wait.c:32
#2 0x0845e720 in main (argc=0, argv=Cannot access memory at address
0x4
) at
/usr/src/debug/dev-lang/php-5.2.11/php-5.2.11/sapi/cgi/cgi_main.c:1632
Previous Comments:
------------------------------------------------------------------------
[2009-11-24 20:20:27] [email protected]
1 child is in endless loop or what? Try attach to such process with gdb
and see what the backtrace says.
------------------------------------------------------------------------
[2009-11-24 03:02:09] mg at fork dot pl
I rebuilt php and started up, but as I don't know what exactly causes
the problem we'll have to wait until it happens...
I started it like
% PHP_FCGI_CHILDREN=2 PHP_FCGI_MAX_REQUESTS=100 php-cgi -e -b
127.0.0.1:30004 -c /.../php.ini
Process group 2720
Forking, 0 running
Forking, 1 running
Wait for kids, pid 2720
Forking, 1 running
Wait for kids, pid 2720
Forking, 1 running
Wait for kids, pid 2720
Forking, 1 running
Wait for kids, pid 2720
pstree -uap shows
`-php-cgi,2720 -e -b 127.0.0.1:30004 -c /.../php.ini
|-php-cgi,13821 -e -b 127.0.0.1:30004 -c /.../php.ini
`-php-cgi,13822 -e -b 127.0.0.1:30004 -c /.../php.ini
------------------------------------------------------------------------
[2009-11-23 10:16:14] [email protected]
Try enable fastcgi debugging with DEBUG_FASTCGI when you compile PHP
and provide the log of the failing run.
------------------------------------------------------------------------
[2009-11-23 02:24:21] mg at fork dot pl
Description:
------------
fast-cgi php process loops forever during wait()ing for child process
while there's no more child processes.
Actual result:
--------------
in cgi_main.c there's loop:
1631 while (1) {
1632 if (wait(&status) >= 0) {
1633 running--;
1634 break;
1635 } else if (exit_signal) {
1636 break;
1637 }
1638 }
wait returns -1 as strace shows:
wait4(-1, 0xbff2d2a4, 0, NULL) = -1 ECHILD (No child
processes)
and loop never breaks (as apparently exit_signal is set to 0).
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=50265&edit=1