• If you are still using CentOS 7.9, it's time to convert to Alma 8 with the free centos2alma tool by Plesk or Plesk Migrator. Please let us know your experiences or concerns in this thread:
    CentOS2Alma discussion
  • Inviting everyone to the UX test of a new security feature in the WP Toolkit
    For WordPress site owners, threats posed by hackers are ever-present. Because of this, we are developing a new security feature for the WP Toolkit. If the topic of WordPress website security is relevant to you, we would be grateful if you could share your experience and help us test the usability of this feature. We invite you to join us for a 1-hour online session via Google Meet. Select a convenient meeting time with our friendly UX staff here.

Apache2 won't close children & eats memory

P

Peter Hase

Guest
Hi Forum,

I looked through the forum here and used google to try to find an answer to my problems:
I recently migrated to a new VPS with my previous plesk installation via the migration manager (Plesk 10.4 to 10.4, sam os, same version: Ubuntu 10.04 LTS).

Now my Apache web server is configured for consuming the least amount of ram and cpu resources, at least I hope to. I monitor it with the plesk health monitor.

My apache2.conf looks like this (in the important parts):

# Timeout: The number of seconds before receives and sends time out.
#
Timeout 10

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 500

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5

##
## Server-Pool Size Regulation (MPM specific)
##

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 7
ServerLimit 30
MaxClients 30
MaxRequestsPerChild 500
</IfModule>

What happens is that the process spawn children, but doesn't close them - the memory just slowly slowly groes. Like a memory leak, but I don't know where it comes from. I tried to minimize the number of mods used and disabled SSL in all my vhosts. I am using stock configured mysql and php5.

Here is what apache2ctl fullstatus tells me when I run it twice shortly after another:

Restart Time: Wednesday, 28-Mar-2012 13:16:07 CEST
Parent Server Generation: 1
Server uptime: 23 minutes 39 seconds
Total accesses: 321 - Total Traffic: 12.4 MB
CPU Usage: u21.6 s2.59 cu0 cs0 - 1.7% CPU load
.226 requests/sec - 9.0 kB/second - 39.7 kB/request
1 requests currently being processed, 6 idle workers

____W_._......................


Current Time: Wednesday, 28-Mar-2012 13:39:59 CEST
Restart Time: Wednesday, 28-Mar-2012 13:16:07 CEST
Parent Server Generation: 1
Server uptime: 23 minutes 51 seconds
Total accesses: 322 - Total Traffic: 12.4 MB
CPU Usage: u21.6 s2.59 cu0 cs0 - 1.69% CPU load
.225 requests/sec - 8.9 kB/second - 39.6 kB/request
1 requests currently being processed, 6 idle workers

___W__._......................

These is what the idle childs are doing (according to apache2ctl and without personal details):
4-1 30117 0/3/12 _ 0.00 11 0 0.0 0.01 0.02 127.0.0.1
<generic vps host> GET /server-status HTTP/1.0
11-0 - 0/0/33 . 13.34 621 0 0.0 0.00 0.30 127.0.0.1
<generic vps host> GET /server-status HTTP/1.0
12-0 - 0/0/26 . 1.39 621 0 0.0 0.00 1.36 127.0.0.1
<generic vps host> GET /server-status HTTP/1.0
13-0 - 0/0/24 . 1.13 621 19 0.0 0.00 1.91 72.14.199.202
<actual vhost configured> GET /feed HTTP/1.1

Does anybody have an idea what is going on here?
 
kinda solved...

I singled out the culprit: It was PHP!
I was fiddling with all kinds of Apache2 settings, but didn't resolve the issue. Then I switched from mod_php to fastcgi php and bam, the problems vanished.
Now apache2 takes around 16MB ram instead of up to 600MB and the php5-cgi children kill themselves as they should after the designated timeout.
The initial loading of a page takes a bit longer, but that is a ok for me.

So, I guess, the problem of the mem leak and and bad php script somewhere isn't solved, but at least switching the php module helped me a lot. for now.
 
Back
Top