sql >> Databasteknik >  >> RDS >> Mysql

Real max_execution_time för PHP på linux

Detta är ett ganska knepigt råd, men det kommer definitivt att göra vad du vill om du är villig att modifiera och kompilera PHP.

Ta en titt på PHP-källkoden på https:// github.com/php/php-src/blob/master/Zend/zend_execute_API.c (filen är Zend/zend_execute_API.c ), vid funktionen zend_set_timeout . Detta är funktionen som implementerar tidsbegränsning. Så här fungerar det på olika plattformar:

  • i Windows, skapa en ny tråd, starta en timer på den och när den är klar, ställ in en global variabel som heter timed_out till 1 kontrollerar PHP-exekveringskärnan denna variabel för varje instruktion och avslutas sedan (mycket förenklat)

  • på Cygwin, använd itimer med ITIMER_REAL, som mäter verklig tid, inklusive eventuell sömn, vänta, vad som helst, höj sedan en signal som kommer att avbryta alla bearbetning och sluta bearbeta

  • på andra unix-system, använd itimer med ITIMER_PROF, som endast mäter CPU-tid som spenderas av den aktuella processen (men både i användarläge och kärnläge). Detta innebär att vänta på andra processer (som MySQL) inte räknas in i detta.

Vad du nu vill göra är att ändra itimern på din Linux från ITIMER_PROF till ITIMER_REAL, vilket du självklart behöver göra manuellt, kompilera om, installera etc. Den andra skillnaden mellan dessa två är att de också använder olika signaler när timern körs ut. Så mitt förslag är att ändra ifdef:

#   ifdef __CYGWIN__

in i

#   if 1

så att du ställer in både ITIMER_REAL och signalen som PHP väntar på till SIGALRM.

Hur som helst är hela denna idé oprövad (jag använder den för något mycket specifikt system, där ITIMER_PROF är trasigt, och det verkar att arbeta), ostödd, etc. Använd den på egen risk. Det kanske fungerar med PHP själv, men det kan bryta andra moduler, i PHP och i Apache, om de av någon anledning, använd SIGALRM-signalen eller annan timer.



  1. PHP Foreach på MySQLi Resultatuppsättning

  2. Vad är skillnaden mellan tinyint, smallint, mediumint, bigint och int i MySQL?

  3. Vad är det bästa sättet att lagra användarbilder med PHP och MySQL?

  4. PHP:MySQL-fråga duplicerar uppdatering utan anledning