Bug #74093 [Fbk->Opn]: Maximum execution time of n+2 seconds exceed not written in error_log

From: Date: Tue, 14 Feb 2017 10:28:45 +0000
Subject: Bug #74093 [Fbk->Opn]: Maximum execution time of n+2 seconds exceed not written in error_log
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-207377@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74093&edit=1 ID: 74093 User updated by: rainer-phpbugs at 7val dot com Reported by: rainer-phpbugs at 7val dot com Summary: Maximum execution time of n+2 seconds exceed not written in error_log -Status: Feedback +Status: Open Type: Bug Package: FPM related Operating System: Linux PHP Version: 7.1.1 Block user comment: N Private report: N New Comment: That is unfortunate. Is _php_error_log_ex() or php_log_err_with_severity() really considered unsafe in this context? If so, is there any chance this could be changed? If that is not possible, can unique exit codes be used to signify the reason the php-fpm child was killed? Chainging the default value of catch_workers_output to "yes" may work for me, but I suspect that it may not be a good solution for everybody. Previous Comments: ------------------------------------------------------------------------ [2017-02-14 08:06:24] laruence@php.net this is an expected behavior, since 7.1 we have new safe timeout handling system, and you example must trigger hard_timeout, in that case, no php function can be called for safety, so we only can call fprintf(stderr instead.. thanks ------------------------------------------------------------------------ [2017-02-13 14:48:09] rainer-phpbugs at 7val dot com Description: ------------ If a Library call does not return within 2s after the max_execution_time has been exceeded, zend_timeout_handler() in Zend/zend_execute_API.c approx. Line 1201 emits the error message to STDERR instead of writing it into the error_log and then kills the child. As a result, the following message, without any further explanation, is logged in error_log: child 23444 exited with code 1 after 360.705768 seconds from start If catch_workers_output is enabled, the "Maximum execution [...] exceeded" message is logged in error_log, prefixed with "said into stderr". This is a regression from PHP 7.0. (tested with 7.0.15, which logs a message in error_log, while 7.1.1 does not with the default configuration). Test script: --------------- <?php /* generate an image with lots of colors using imagemagick: convert -size 4096x4096 -define gradient:direction=east gradient:red-green PNG48:hor_gradient.png convert hor_gradient.png -rotate 90 gradient_h.png convert -size 4096x4096 gradient: PNG48:linear_gradient.png composite linear_gradient.png -compose Multiply gradient_h.png grad.png or download from http://can avan.de/lots_of_colors.png */ $i = new imagick(); $i->readimage('grad.png'); print($i->getImageColors()."\n"); Expected result: ---------------- "Fatal error: Maximum execution time of 30+2 seconds" should be logged in the configured error_log, just like the "Fatal error: Maximum execution time of 30 seconds" message. This should be independent of the catch_workers_output setting. Actual result: -------------- Only "child 1903 exited with code 1 after 68.983009 seconds from start" is logged. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=74093&edit=1

« previous php.bugs (#207377) next »