| Author |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 | 
|  Posted: Wed 20 May '20 12:22    Post subject: mod_fcgid latency on high concurrency |   |  
| 
 |  
| Hi @all! 
 I open this topic to (re?)start a discussion around the mod_fcgid latency in case of high concurrency.
 This subject has already been discussed (cf. https://bz.apache.org/bugzilla/show_bug.cgi?id=53693) with a revert in mod_fcgid 2.3.9
 Being faced with the problem (thumb gallery whose images are generated in php via mod_fcgid involving concurrency from several tens of processes without lazy-load) I have randomly latencies of (exactly) one second on 1 to several images.
 This is explained in the mod_fcgid code if all the processes are busy:
  	  | Code: |  	  | apr_sleep (apr_time_from_sec (1)); | 
 https://github.com/pagespeed/mod_fcgid/blob/master/modules/fcgid/fcgid_bridge.c#L456
 
 In your point of view, what would be the best way to go around this bottleneck?
 1) Reducing the waiting time apr_sleep (apr_time_from_msec (XX)); maybe with XX externalized as the time to spawn a new process depends on many parameters
Many thanks for your advices!2) Directly force a new process spawn and try to handle request to it more than 2 times (see patch https://www.mail-archive.com/dev@httpd.apache.org/msg55268.html which I am currently testing)
 3) Other ideas? On configuration side?
 ++NoNo
 |  | 
| Back to top |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 | 
|  Posted: Wed 20 May '20 13:47    Post subject: |   |  
| 
 |  
| ...and here is my config: 
  	  | Code: |  	  | FcgidInitialEnv PHPRC "C:/serveur/php7" <Files ~ (\.php)>
 FcgidWrapper "C:/serveur/php7/php-cgi.exe -c C:/serveur/php7/php.ini" .php
 </Files>
 FcgidInitialEnv TEMP "R:/php-httpd_temp"
 FcgidInitialEnv TMP "R:/php-httpd_temp"
 FcgidInitialEnv windir "C:\WINDOWS"
 FcgidInitialEnv SystemRoot "C:\Windows"
 FcgidInitialEnv SystemDrive "C:"
 FcgidInitialEnv PROCESSOR_ARCHITECTURE "AMD64"
 FcgidInitialEnv PROCESSOR_IDENTIFIER "Intel64 Family 6 Model 42 Stepping 7, GenuineIntel"
 FcgidInitialEnv PROCESSOR_LEVEL "6"
 FcgidInitialEnv PROCESSOR_REVISION "2a07"
 FcgidInitialEnv NUMBER_OF_PROCESSORS 4
 FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0
 FcgidInitialEnv PHP_FCGI_CHILDREN 0
 FcgidFixPathinfo 1
 FcgidWin32PreventOrphans On
 FcgidMaxRequestsPerProcess 0
 FcgidMaxProcesses 40
 FcgidMaxProcessesPerClass 40
 FcgidMinProcessesPerClass 16
 FcgidIdleScanInterval 1
 FcgidErrorScanInterval 1
 FcgidZombieScanInterval 1
 FcgidIdleTimeout 60
 FcgidProcessLifeTime 60
 FcgidConnectTimeout 1
 FcgidIOTimeout 600
 FcgidBusyTimeout 600
 FcgidBusyScanInterval 600
 FcgidMaxRequestLen 134217728
 FcgidOutputBufferSize 0
 FcgidPassHeader Authorization
 | 
 |  | 
| Back to top |  | 
| James Blond Moderator
 
  
 Joined: 19 Jan 2006
 Posts: 7442
 Location: EU, Germany, Next to Hamburg
 
 | 
|  Posted: Wed 20 May '20 16:33    Post subject: |   |  
| 
 |  
| The re-spawn takes time. I noticed that, too. 
 You set FcgidProcessLifeTime to one minute. I set it to 0 (endless). Every minute mod_fcgid kills the spawned php-cgi process.
 
 Why do you let the module kill the php process so early? That also causes a log flood[1]. It has only been fixed in trunk. But nobody dares a release of 2.3.10. I run the .10 for years without any issues.
 
 --- edit ---
 
 My config[2]
 
 --- /edit ---
 
 [1] https://bz.apache.org/bugzilla/show_bug.cgi?id=54597
 [2] https://www.apachelounge.com/viewtopic.php?t=2394
 |  | 
| Back to top |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 | 
|  Posted: Sun 24 May '20 14:53    Post subject: |   |  
| 
 |  
| Thanks @James Blond for your feedback! 
 Yes, FcgidProcessLifeTime set at 1 minute is really too short but setting it to endless it’s not possible for me with php in a multiple vhost context (different kind of php usage that may have memory issue like big persistent footprint or leaks)
 I tried it and all php-cgi process were zombified after some hours… like with fcgi-proxy)
 
 I also run mod_fcgid built from the trunk (2.3.10 as I understand…) and never had issue, just this frequent "1 second latency" on high concurrency.
 
 I’ll try to make a FcgidMinSpareProcesses patch… for fun ^^
 |  | 
| Back to top |  | 
| James Blond Moderator
 
  
 Joined: 19 Jan 2006
 Posts: 7442
 Location: EU, Germany, Next to Hamburg
 
 | 
|  Posted: Sun 24 May '20 20:41    Post subject: |   |  
| 
 |  
| Well I use the Thread Safe version (TS) and don't have such issues at all. |  | 
| Back to top |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 | 
|  Posted: Fri 05 Jun '20 9:44    Post subject: |   |  
| 
 |  
| After 1 week testing TS instead of NTS (but process spawned by fcgid doesn't share context except opcache, so...) nothing changes for me with long FcgidProcessLifeTime value : some child are not reachable after some long time. I know that some of my php script are quite dirty.
 
 Fyi, after testing the 3 patches (see https://bz.apache.org/bugzilla/show_bug.cgi?id=53693 & https://www.mail-archive.com/dev@httpd.apache.org/msg55262.html) the one from Merijn van den Kroonenberg seems to be the best compromise without any 503 and lower latencies
 |  | 
| Back to top |  | 
| James Blond Moderator
 
  
 Joined: 19 Jan 2006
 Posts: 7442
 Location: EU, Germany, Next to Hamburg
 
 | 
|  Posted: Fri 05 Jun '20 15:38    Post subject: |   |  
| 
 |  
| I'm a bit out of context after such a long time looking that the code of mod_fcgid 
 basicly what that patches removes is
 
  	  | Code: |  	  | if (i > 0 || j > 0 || count_busy_processes(r, &fcgi_request)) {
 -                apr_sleep(apr_time_from_sec(1));
 
 | 
 
 removing i (connected ipc handle) seems okay.
 removing j (FCGID_APPLY_TRY_COUNT) also okay
 
 The condition also calls count_busy_processes which sets a lock. That might cause a bottle neck.
 
 So maybe only removing that function call and lowering the sleep time to re reasonable might be it. This is only my thinking with you trying
  |  | 
| Back to top |  | 
| federicoemartinez 
 
 
 Joined: 13 May 2023
 Posts: 3
 Location: Argentina
 
 | 
|  Posted: Sat 13 May '23 14:03    Post subject: |   |  
| 
 |  
| 
 Would it be possible to you to publish the patched version with the patch by Merijn van den Kroonenberg so I can try it? I think I have hit the same issue but hasn't been able to configure a windows machine to build mod_fcgid yet.
 |  | 
| Back to top |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 |  | 
| Back to top |  | 
| bagu 
 
  
 Joined: 06 Jan 2011
 Posts: 193
 Location: France
 
 | 
|  Posted: Sun 14 May '23 21:02    Post subject: |   |  
| 
 |  
| 
 Apache don't load fcgid module if i replace mod_fcgid.so 2.3.10 vs17 by yours.
 Is there something else to do than just replace ?
 |  | 
| Back to top |  | 
| federicoemartinez 
 
 
 Joined: 13 May 2023
 Posts: 3
 Location: Argentina
 
 | 
|  Posted: Mon 15 May '23 1:24    Post subject: |   |  
| 
 |  
| 
 Thanks a lot!
 |  | 
| Back to top |  | 
| nono303 
 
  
 Joined: 20 Dec 2016
 Posts: 214
 Location: Lille, FR, EU
 
 |  | 
| Back to top |  | 
| bagu 
 
  
 Joined: 06 Jan 2011
 Posts: 193
 Location: France
 
 | 
|  Posted: Mon 15 May '23 19:50    Post subject: |   |  
| 
 |  
| Ok, it was a download problem. Thanks  |  | 
| Back to top |  |