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��\222�", 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�!߿�\204 \blTf\b����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