Author |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Wed 26 Apr '23 14:10 Post subject: Apache Memory Issues PHP as module (solved with mod_fcgid) |
|
|
I have encountered a problem similar to what Razzi29 wrote about on Feb 6. At 2 of our customer sites, Apache kept increasing in memory usage, often exceeding 6 GB. Normally, our Apache servers use around 300 MB. I noticed that at the problem sites the amount just keeps increasing.
We are running Apache and PHP. I tried changing PHP versions thinking that would be the issue, but it didn't make a difference. So started testing with different versions of Apache and found that it appears to have started with Windows Apache version 2.4.55. 2.4.54 VS 16 and VS 17 seem to run OK.
Any thoughts?
Thanks!
Tom |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Wed 03 May '23 9:54 Post subject: |
|
|
Hi Tom,
do you run PHP as a module loaded in apache or over fcgid? |
|
Back to top |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Wed 03 May '23 14:06 Post subject: |
|
|
Hi James,
Thanks for the response, I am running PHP as an apache module. Should it be run using fcgid? |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Wed 03 May '23 18:51 Post subject: |
|
|
On Windows PHP often tends to have memory leaks with extensions. There is a tutorial(1) how to change your setup to fcgid. You can run PHP as a module and over fcgid at the same time in different vhosts.
Also recommend to check try adding the following block at the end of httpd.conf
Code: |
EnableMMAP Off
EnableSendfile Off
AcceptFilter http none
AcceptFilter https none
|
(1) https://www.apachelounge.com/viewtopic.php?t=2394[] |
|
Back to top |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Wed 03 May '23 22:55 Post subject: |
|
|
Thank you for the info, will try running php with fcgid.
Tom |
|
Back to top |
|
dpat99
Joined: 15 May 2023 Posts: 5
|
Posted: Tue 16 May '23 10:29 Post subject: Same problem |
|
|
Hi guys,
We have the same problem it seems.
Did running with fcgid solve your problem?
/ Patrik |
|
Back to top |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Tue 16 May '23 15:15 Post subject: |
|
|
We have not yet installed the change to fcgid on a customers site (where the problem was occurring) since we wanted to ensure the functionality and performance would be OK using fcgid and it appears to be working ok at the moment with the older Apache.
We already have an fcgid program (mapserver) so want to make sure that both php and mapserver have the correct fcgid configurations. |
|
Back to top |
|
dpat99
Joined: 15 May 2023 Posts: 5
|
Posted: Tue 16 May '23 21:48 Post subject: |
|
|
Thanks for the update! |
|
Back to top |
|
BrainFooLong
Joined: 31 May 2023 Posts: 5
|
Posted: Wed 31 May '23 10:32 Post subject: |
|
|
We had exactly the same problem here. Apache memory usage increased slighty from day to day. Finally ended up in crashing the server at midnight, by eating up all free memory.
We run PHP 8.2 here on windows server machines.
I cannot say if ever increasing memory was a thing before 2.4.54, as we not have properly monitored RAM usage the time we had 2.4.54 and older versions. But i definetely had a crash the first time because of no free RAM with apache.
Monitoring tells, it climbs very slighty, depending on the server request load (We have multiple servers, from 200k daily requests down to 20k daily requests).
A apache restart frees all blocked memory. In the task manager it is clearly visible that apache blocks the memory.
We finally decided to not wait for a fix and switched to FCGI (With mod_fcgid). Daily server/apache restart is a No-No for us, but would maybe workaround the issue. We now have this running a few weeks and everything looks good with FCGI and PHP on windows. Once you have figured out the correct apache config for the FCGI parts, it run smoothly.
I cannot spot any performance impact/difference. Request/Response times are equal. No hickups, no new errors in error logs. RAM stays equal, with spikes depending on current requests (Which is expected). But it returns to normal after the requests are done.
So, TLDR: mod_fcgid works for us and resolves the issues with memory consumption.
Here is our config for the onces who are interested (We have some really long running PHP jobs, if you wonder about large timeouts):
Code: | LoadModule fcgid_module modules/fcgid/mod_fcgid.so
# 2GB file upload equals to php.ini max_upload_size
FcgidMaxRequestLen 2147483648
# increase fcgid timeout to 5 hours
FcgidIOTimeout 18001
FcgidBusyTimeout 18001
FcgidIdleTimeout 18001
FcgidInitialEnv PHPRC "/www"
<FilesMatch \.php$>
Options +ExecCGI
SetHandler fcgid-script
FcgidWrapper "/srv/php8/php-cgi.exe" .php
</FilesMatch> |
|
|
Back to top |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Wed 31 May '23 14:49 Post subject: |
|
|
Thanks for the info. We have not been able to recreate the problem on a local system, but we have a couple of customers that are experiencing this. I am trying to get some time on their systems so we can switch them over to FCGI and do some basic tests.
We did do some performance tests on a local system using FCGI and the results appear to be comparable.
Thank you for your configuration information. I used the same FCGI parameters as described in https://www.apachelounge.com/viewtopic.php?t=2394 and it worked well. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Tue 06 Jun '23 17:32 Post subject: |
|
|
Quote: | We had exactly the same problem here. Apache memory usage increased slighty from day to day. Finally ended up in crashing the server at midnight, by eating up all free memory. |
My Apache 2.4.56 (own built) has been running with PHP 8.1.18 as mod_php since May 14th. I have been monitoring the mem usage during the last week. Sometimes the memory goes up to 2.5GB, but when being quite idle for some hours it also goes down again. Last Saturday the memory usage went down to 181.2MB. That is probably as low as it can get, because OPcache alone takes almost 158.4MB by now. So I really do not have the problem of ever increasing memory usage.
What memory usage are we talking about in your cases? |
|
Back to top |
|
tdellinger
Joined: 19 Jul 2018 Posts: 8 Location: US, McKinney TX
|
Posted: Tue 06 Jun '23 18:48 Post subject: |
|
|
We are running PHP 7.4.x (such as 7.4.33). At one customer site that was having memory issues, Apache reached around 8.6 GB. At that point, 98% of the system memory was being used out of a total of 12GB, so we stopped Apache. For us, normally Apache only uses 200 to 300 MB.
At another customer site with the same problem, I was able to change to use PHP fcgid and Apache is staying around the 200 to 300 MB range and everything is looking good.
Tom |
|
Back to top |
|
BrainFooLong
Joined: 31 May 2023 Posts: 5
|
Posted: Mon 19 Jun '23 8:50 Post subject: |
|
|
Jan-E wrote: | What memory usage are we talking about in your cases? |
For us, we have a 1 month maintenance cycle with restarting apache each month once.
21 days after last restart, apache had about 7G~ used RAM and crashed (Because all OS memory was fully used).
It increased from 100MB at start to the 7G in about 21 days with round about 21 million requests done in that time.
We have times of almost full idle each night, so it should recover, but never had.
Fixed with FCGI usage as stated above. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Tue 20 Jun '23 19:01 Post subject: |
|
|
Strange. I happened to be looking at my server for a while now. Apache shrank from 1383 MB to 1105 MB in less than 2 hours.
Edit: yet another hour later Apache’s memory footprint is 1058 MB. It keeps on shrinking. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Mon 26 Jun '23 11:08 Post subject: |
|
|
It helped me move the session handling from files to Redis.
Since Apache does not have to watch all the open session files from PHP.
Code: |
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
|
The Redis server: https://github.com/microsoftarchive/redis/releases
Does anyone know a newer version for Windows? |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
|
Back to top |
|