[php-src] Issue #11971: set_timeout() fails to terminate execution when IO Latency is high

From: Date: Mon, 14 Aug 2023 15:24:44 +0000
Subject: [php-src] Issue #11971: set_timeout() fails to terminate execution when IO Latency is high
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-245182@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/11971 Author: mikhainin ### Description I'm not sure if this is a bug or not and I haven't found the proper channel to ask (shall I raise a discussion in Internals?). We faced a problem in our production cluster. Our setup is following: SAPI: fpm max_execution_time: **28** hard_timeout: **2** When Opcache is reloading, we're having excessive IO pressure, which is expected - PHP starts reading everything from disk, etc... However, scripts started executing for **5+ minutes** - that wasn't expected. Further investigation showed that zend_set_timeout_ex uses setitimer(ITIMER_PROF) by default, which means the time the process spends in IOWait doesn't seem to count. So, basically, even though our gateway cannot wait for such long - it expects that application will finish earlier, PHP still performs the request. One more backside of such behaviour - the restart of Opcache takes longer - it waits until all the workers finish execution (or become killed by opcache when opcache.force_restart_timeout is reached). This problem doesn't seem to appear when we use ITIMER_REAL. I can provide how we tested this. I can see a couple of solutions here: * Switch to ITIMER_REAL (it looks like there are some concerns about the [Apache module](https://externals.io/message/28672)) * Choose one over another for some SAPIs when we are sure that there shouldn't be a conflict (e.g. FPM, CLI) * Make this behaviour configurable (either at runtime or compile time) * Something else?

« previous php.bugs (#245182) next »