Author |
|
nono303
Joined: 20 Dec 2016 Posts: 205 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
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? Many thanks for your advices!
++NoNo |
|
Back to top |
|
nono303
Joined: 20 Dec 2016 Posts: 205 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: 7371 Location: 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: 205 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: 7371 Location: 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: 205 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: 7371 Location: 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: 205 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: 205 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 |
|