ID:               37422
 Updated by:       [EMAIL PROTECTED]
 Reported By:      phpbugs at thequod dot de
-Status:           Open
+Status:           Feedback
 Bug Type:         CGI related
 Operating System: Ubuntu Linux
 PHP Version:      5.1.5CVS
 Assigned To:      dmitry
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip




Previous Comments:
------------------------------------------------------------------------

[2006-05-15 19:15:38] phpbugs at thequod dot de

I've tried debugging the problem a bit more (with gdb):

The main process (which was started at first) has this 
backtrace:
#0  0xb7890968 in wait () from /lib/tls/libc.so.6
#1  0x083203bb in main (argc=1, argv=0xbfdf8be4) 
at /home/XXX/cvs/php/php51dev/sapi/cgi/cgi_main.c:1285

("ps aux" says:
XXX    21201  0.0  0.7  15372  3976 ?        Ss   May14   
0:00 /bin/php5-fcgi)

Line 1285 is the while loop here:
            if (parent) {
#ifdef DEBUG_FASTCGI
                fprintf(stderr, "Wait for kids, pid %d\n", 
getpid());
#endif
                while (wait(&status) < 0) {
                }
                running--;
            }


And here are backtraces, of two php5-fcgi childs (4 
total):
(gdb) bt
#0  0xb78c4678 in poll () from /lib/tls/libc.so.6
#1  0x0827b266 in php_sockop_read (stream=0x866546c, 
buf=0xfffffffc <Address 0xfffffffc out of bounds>, 
count=4294967292)
    at php_network.h:164
#2  0x08099b5e in php_openssl_sockop_read 
(stream=0x866546c, buf=0x866557c "etting
t&#65533;&#65533;\222&#65533;", 
count=8192)
    at /home/XXX/cvs/php/php51dev/ext/openssl/xp_ssl.c:229
#3  0x08271d20 in php_stream_fill_read_buffer 
(stream=0x866546c, size=1) 
at /home/XXX/cvs/php/php51dev/main/streams/streams.c:541
#4  0x08271dd2 in _php_stream_read (stream=0x866546c, 
buf=0xbfdf2187 "\b&#65533;!&#2047;&#65533;\204
\blTf\b&#65533;&#65533;&#65533;&#65533;kqI\b", size=1)
    
at /home/XXX/cvs/php/php51dev/main/streams/streams.c:584
#5  0x08271fa3 in _php_stream_getc (stream=0xfffffffc) 
at /home/XXX/cvs/php/php51dev/main/streams/streams.c:649
#6  0x082084c5 in zif_fgetc (ht=1, return_value=0x869180c, 
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
    at /home/XXX/cvs/php/php51dev/ext/standard/file.c:1076
#7  0x082b503b in zend_do_fcall_common_helper_SPEC 
(execute_data=0xbfdf4410) at zend_vm_execute.h:200
#8  0x082b472b in execute (op_array=0x8681814) at 
zend_vm_execute.h:92
#9  0x0829c694 in zend_execute_scripts (type=8, 
retval=Variable "retval" is not available.
) at /home/XXX/cvs/php/php51dev/Zend/zend.c:1109
#10 0x08263044 in php_execute_script 
(primary_file=0xbfdf8acc) 
at /home/XXX/cvs/php/php51dev/main/main.c:1732
#11 0x08320831 in main (argc=1, argv=0xbfdf8be4) 
at /home/XXX/cvs/php/php51dev/sapi/cgi/cgi_main.c:1608


#0  0xb78c4678 in poll () from /lib/tls/libc.so.6
#1  0x0827b266 in php_sockop_read (stream=0x8668804, 
buf=0xfffffffc <Address 0xfffffffc out of bounds>, 
count=4294967292)
    at php_network.h:164
#2  0x08099b5e in php_openssl_sockop_read 
(stream=0x8668804, buf=0x865e50c "", count=8192)
    at /home/XXX/cvs/php/php51dev/ext/openssl/xp_ssl.c:229
#3  0x08271d20 in php_stream_fill_read_buffer 
(stream=0x8668804, size=8192)
    
at /home/XXX/cvs/php/php51dev/main/streams/streams.c:541
#4  0x08272183 in _php_stream_get_line (stream=0x8668804, 
buf=0x0, maxlen=0, returned_len=0xbfdf21b0)
    
at /home/XXX/cvs/php/php51dev/main/streams/streams.c:820
#5  0x0820b4ad in zif_fgets (ht=1, return_value=0x8696bf4, 
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
    at /home/XXX/cvs/php/php51dev/ext/standard/file.c:1021
#6  0x082b503b in zend_do_fcall_common_helper_SPEC 
(execute_data=0xbfdf4410) at zend_vm_execute.h:200
#7  0x082b472b in execute (op_array=0x865228c) at 
zend_vm_execute.h:92
#8  0x0829c694 in zend_execute_scripts (type=8, 
retval=Variable "retval" is not available.
) at /home/XXX/cvs/php/php51dev/Zend/zend.c:1109
#9  0x08263044 in php_execute_script 
(primary_file=0xbfdf8acc) 
at /home/XXX/cvs/php/php51dev/main/main.c:1732
#10 0x08320831 in main (argc=1, argv=0xbfdf8be4) 
at /home/XXX/cvs/php/php51dev/sapi/cgi/cgi_main.c:1608

PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=100

------------------------------------------------------------------------

[2006-05-15 11:03:41] [EMAIL PROTECTED]

the behavior of PHP_FCGI_CHILDREN was changed about year ago. If it is
not set then main PHP process doesn't fork worker processes but serve
FastCGI requests by itself.

I cannot reproduce the problem with PHP_FCGI_CHILDREN is set, but it
well reproducable without PHP_FCGI_CHILDREN.

BTW I can reproduce the same problem with mod_fastcgi and PHP-5.0, and
cannot reproduce with PHP-5.1.4 and zend_enabler. So I assume this is
mod_fastcgi bug, that cannot restart PHP properly.




------------------------------------------------------------------------

[2006-05-12 19:37:53] phpbugs at thequod dot de

The test script is just <?php echo 'foo'; ?>.

------------------------------------------------------------------------

[2006-05-12 19:34:38] phpbugs at thequod dot de

Description:
------------
I'm running Apache2/mod_fastcgi/PHP5.1.5-dev (built: May 
12 2006 19:46:11).

The problem is, that without setting PHP_FCGI_CHILDREN 
children, PHP does not default to the documented value of 
8 (no source, but often read): it does not create any 
children.

This might be just a documentation issue/bug, but without 
using any children, I can reproduce crashing PHP (somehow 
after PHP_FCGI_MAX_REQUESTS), but also experience with 
PHP_FCGI_CHILDREN set to 4!

This "bogus" report seems to be related: 
http://bugs.php.net/bug.php?id=27802

Reproduce code:
---------------
In fastcgi.conf:        FastCgiServer
/XXX/fcgi-scripts/XXX/php5-fcgi-starter -user phptest_codeprobe -group
phptest_codeprobe -pass-header HTTP_AUTHORIZATION -flush -idle-timeout
60

php5-fcgi-starter script:
#!/bin/sh
PHPRC="/vhosts/phptest_codeprobe/conf/php5"
export PHPRC
PHP_FCGI_MAX_REQUESTS=100
export PHP_FCGI_MAX_REQUESTS
exec /bin/php5-fcgi


1. Restart Apache
2. A php5-fcgi process gets started (without any childs)
3. ab2 -n 101 url/
4. A new php5-fcgi process gets "re-spawned"
5. ab2 -n 201 url/
6. The longest request takes 4s(!), instead of 0.004.
7. ab2 -n 301 url/
8. The php5-fcgi process disappears forever!

This only seems to be an indication, because I have one server setup
with PHP_FCGI_MAX_REQUESTS=100 and PHP_FCGI_CHILDREN=4 and it also dies
away like this (with the same entries in the server's error log).

This is since PHP 5.1.3/5.1.4..

Expected result:
----------------
Do not crash.

Actual result:
--------------
Apache error log:
FastCGI: comm with 
server "/var/www/fcgi-scripts/phptest_codeprobe/php5-fcgi-starter" 
aborted: idle timeout (60 sec)
FastCGI: incomplete headers (0 bytes) received from 
server "/var/www/fcgi-scripts/phptest_codeprobe/php5-fcgi-starter"



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37422&edit=1

Reply via email to