Putting Apache on a diet - how to get a lean configuration, Part 1 Sun, Jul 16. 2017
For this reason, the first limitation you are likely to encounter running Apache is a limitation on memory. I will explore this topic and show you how you can do the same.
The first thing need to determine about Apache is what mode it is running in. If your plan is to use Apache with php via mod_apache, then the prevailing wisdom for many years has been that there may be library extensions in PHP that are not thread safe. For this reason, people have tended to avoid running Apache as a threaded server, for fear that scripts may randomly die producing the dreaded 500 Internal server error pages we all know and love.
This fear may be overstated depending on the nature of your php code, but the defaults for apache packages I've seen, seem almost always to be using the prefork worker.
Prefork vs Worker?
So the first question you might be asking yourself is, which mode is my current apache server running in? There is a simple safe way to determine this -- run the httpd(apache) program with a specific command line switch. There are programs like which and whereis that might help you locate it, if you don't know where it is.
whereis httpd
So let's run the /usr/sbin/httpd with the -h for help and see what happens:
/usr/sbin/httpd -h
Well this looks promising --- httpd -l should give us a list of modules!
/usr/sbin/httpd -l
So as you can see, there's a small group of core modules compiled into Apache, and in this case the server is running prefork and NOT running worker (aka the threaded server).
What is Prefork?
In unix, "forking" is a way for a parent program to essentially clone a copy of itself as a seperate child program. For this reason when you run ps or top you'll see a number of different httpd processes running.
ps aux | grep httpd
There are some interesting things to note about this output. First off we have one httpd running as root. Then we have 20 httpd's running as apache.
On this particular server, if you look in the httpd.conf file which is being loaded when the server starts, you find this configuration section:
So as you can see, the MaxSpareServers of 20 matches the number of child processes we have, and this is because this particular server has been running for a while, and has seen some periods where it was receiving enough traffic that apache forked additional child processes, keeping those 20 child servers around. If however, we restart apache, what will we find (assuming there is little to no load when it restarts).
I'm guessing nobody will be surprised to find that we have exactly 8 child processes thanks to the "StartServers 8" configuration item. Now you might be interested in the other parameters. Take the time to read about them in the apache documentation! I am going to talk about the "MaxRequestsPerChild 4000" parameter.
MaxRequestsPerChild
So you might be wondering at this point if apache ever kills one of its child processes?
The answer is yes! Controlling the killing of child processes is what the MaxRequestsPerChild parameter does. Any child will service 4k HTTP requests before it is killed by the parent, and replaced by a new forked child process.
You also might be wondering why Apache doesn't just keep a child process going forever. One reason, is to return memory back to the operating system.
If we run ps aux | more, so we can see the column headers, we'll find that several of the headers are displaying memory statistics.
With these flags for the ps command, we can now see the VSZ and RSS columns, which display memory usage for the process, are showing a variety of different numbers (all of which are in KB) to indicate the amount of memory the process requires. Or do they?
As it turns out these numbers give you a general idea of what the process would require in a vacuum, but doesn't really give you accurate information. This is because substantial amounts of memory use needed for the code segments of the program are in shared libraries which can be shared by all the processes that need them, without having to make a seperate copy of the code (hence the explanation for the word "shared" in the name). We need a better utility to look at the real memory usage.
We can use pmap to look at a specific child process by passing in it's process id:
pmap -d 30548
[root@penny conf]# pmap -d 30548
30548: /usr/sbin/httpd
Address Kbytes Mode Offset Device Mapping
00002b937f999000 312 r-x-- 0000000000000000 0fd:00002 httpd
00002b937f9e7000 100 rw-s- 0000000000000000 000:0007c [ anon ]
00002b937fa41000 1340 rw--- 00002b937fa41000 000:00000 [ anon ]
00002b937fbe6000 16 rw--- 000000000004d000 0fd:00002 httpd
00002b937fbea000 12 rw--- 00002b937fbea000 000:00000 [ anon ]
00002b937fbed000 112 r-x-- 0000000000000000 0fd:00002 ld-2.5.so
00002b937fc09000 1032 rw--- 00002b937fc09000 000:00000 [ anon ]
00002b937fd0b000 88 rw-s- 0000000000000000 000:0007c [ anon ]
00002b937fe09000 4 r---- 000000000001c000 0fd:00002 ld-2.5.so
00002b937fe0a000 4 rw--- 000000000001d000 0fd:00002 ld-2.5.so
00002b937fe0b000 520 r-x-- 0000000000000000 0fd:00002 libm-2.5.so
00002b937fe8d000 2044 ----- 0000000000082000 0fd:00002 libm-2.5.so
00002b938008c000 4 r---- 0000000000081000 0fd:00002 libm-2.5.so
00002b938008d000 4 rw--- 0000000000082000 0fd:00002 libm-2.5.so
00002b938008e000 120 r-x-- 0000000000000000 0fd:00002 libpcre.so.0.0.1
00002b93800ac000 2048 ----- 000000000001e000 0fd:00002 libpcre.so.0.0.1
00002b93802ac000 4 rw--- 000000000001e000 0fd:00002 libpcre.so.0.0.1
00002b93802ad000 84 r-x-- 0000000000000000 0fd:00002 libselinux.so.1
00002b93802c2000 2048 ----- 0000000000015000 0fd:00002 libselinux.so.1
00002b93804c2000 8 rw--- 0000000000015000 0fd:00002 libselinux.so.1
00002b93804c4000 8 rw--- 00002b93804c4000 000:00000 [ anon ]
00002b93804c6000 100 r-x-- 0000000000000000 0fd:00002 libaprutil-1.so.0.2.7
00002b93804df000 2048 ----- 0000000000019000 0fd:00002 libaprutil-1.so.0.2.7
00002b93806df000 4 rw--- 0000000000019000 0fd:00002 libaprutil-1.so.0.2.7
00002b93806e0000 36 r-x-- 0000000000000000 0fd:00002 libcrypt-2.5.so
00002b93806e9000 2044 ----- 0000000000009000 0fd:00002 libcrypt-2.5.so
00002b93808e8000 4 r---- 0000000000008000 0fd:00002 libcrypt-2.5.so
00002b93808e9000 4 rw--- 0000000000009000 0fd:00002 libcrypt-2.5.so
00002b93808ea000 184 rw--- 00002b93808ea000 000:00000 [ anon ]
00002b9380918000 228 r-x-- 0000000000000000 0fd:00002 libldap-2.3.so.0.2.31
00002b9380951000 2048 ----- 0000000000039000 0fd:00002 libldap-2.3.so.0.2.31
00002b9380b51000 8 rw--- 0000000000039000 0fd:00002 libldap-2.3.so.0.2.31
00002b9380b53000 4 rw--- 00002b9380b53000 000:00000 [ anon ]
00002b9380b54000 52 r-x-- 0000000000000000 0fd:00002 liblber-2.3.so.0.2.31
00002b9380b61000 2048 ----- 000000000000d000 0fd:00002 liblber-2.3.so.0.2.31
00002b9380d61000 4 rw--- 000000000000d000 0fd:00002 liblber-2.3.so.0.2.31
00002b9380d62000 964 r-x-- 0000000000000000 0fd:00002 libdb-4.3.so
00002b9380e53000 2048 ----- 00000000000f1000 0fd:00002 libdb-4.3.so
00002b9381053000 20 rw--- 00000000000f1000 0fd:00002 libdb-4.3.so
00002b9381058000 132 r-x-- 0000000000000000 0fd:00002 libexpat.so.0.5.0
00002b9381079000 2044 ----- 0000000000021000 0fd:00002 libexpat.so.0.5.0
00002b9381278000 12 rw--- 0000000000020000 0fd:00002 libexpat.so.0.5.0
00002b938127b000 4 rw--- 00002b938127b000 000:00000 [ anon ]
00002b938127c000 152 r-x-- 0000000000000000 0fd:00002 libapr-1.so.0.2.7
00002b93812a2000 2048 ----- 0000000000026000 0fd:00002 libapr-1.so.0.2.7
00002b93814a2000 4 rw--- 0000000000026000 0fd:00002 libapr-1.so.0.2.7
00002b93814a3000 88 r-x-- 0000000000000000 0fd:00002 libpthread-2.5.so
00002b93814b9000 2048 ----- 0000000000016000 0fd:00002 libpthread-2.5.so
00002b93816b9000 4 r---- 0000000000016000 0fd:00002 libpthread-2.5.so
00002b93816ba000 4 rw--- 0000000000017000 0fd:00002 libpthread-2.5.so
00002b93816bb000 16 rw--- 00002b93816bb000 000:00000 [ anon ]
00002b93816bf000 8 r-x-- 0000000000000000 0fd:00002 libdl-2.5.so
00002b93816c1000 2048 ----- 0000000000002000 0fd:00002 libdl-2.5.so
00002b93818c1000 4 r---- 0000000000002000 0fd:00002 libdl-2.5.so
00002b93818c2000 4 rw--- 0000000000003000 0fd:00002 libdl-2.5.so
00002b93818c3000 4 rw--- 00002b93818c3000 000:00000 [ anon ]
00002b93818c4000 1340 r-x-- 0000000000000000 0fd:00002 libc-2.5.so
00002b9381a13000 2044 ----- 000000000014f000 0fd:00002 libc-2.5.so
00002b9381c12000 16 r---- 000000000014e000 0fd:00002 libc-2.5.so
00002b9381c16000 4 rw--- 0000000000152000 0fd:00002 libc-2.5.so
00002b9381c17000 20 rw--- 00002b9381c17000 000:00000 [ anon ]
00002b9381c1c000 236 r-x-- 0000000000000000 0fd:00002 libsepol.so.1
00002b9381c57000 2048 ----- 000000000003b000 0fd:00002 libsepol.so.1
00002b9381e57000 4 rw--- 000000000003b000 0fd:00002 libsepol.so.1
00002b9381e58000 40 rw--- 00002b9381e58000 000:00000 [ anon ]
00002b9381e62000 16 r-x-- 0000000000000000 0fd:00002 libuuid.so.1.2
00002b9381e66000 2044 ----- 0000000000004000 0fd:00002 libuuid.so.1.2
00002b9382065000 4 rw--- 0000000000003000 0fd:00002 libuuid.so.1.2
00002b9382066000 4 rw--- 00002b9382066000 000:00000 [ anon ]
00002b9382067000 68 r-x-- 0000000000000000 0fd:00002 libresolv-2.5.so
00002b9382078000 2048 ----- 0000000000011000 0fd:00002 libresolv-2.5.so
00002b9382278000 4 r---- 0000000000011000 0fd:00002 libresolv-2.5.so
00002b9382279000 4 rw--- 0000000000012000 0fd:00002 libresolv-2.5.so
00002b938227a000 8 rw--- 00002b938227a000 000:00000 [ anon ]
00002b938227c000 96 r-x-- 0000000000000000 0fd:00002 libsasl2.so.2.0.22
00002b9382294000 2048 ----- 0000000000018000 0fd:00002 libsasl2.so.2.0.22
00002b9382494000 4 rw--- 0000000000018000 0fd:00002 libsasl2.so.2.0.22
00002b9382495000 288 r-x-- 0000000000000000 0fd:00002 libssl.so.0.9.8e
00002b93824dd000 2048 ----- 0000000000048000 0fd:00002 libssl.so.0.9.8e
00002b93826dd000 24 rw--- 0000000000048000 0fd:00002 libssl.so.0.9.8e
00002b93826e3000 4 rw--- 00002b93826e3000 000:00000 [ anon ]
00002b93826e4000 1204 r-x-- 0000000000000000 0fd:00002 libcrypto.so.0.9.8e
00002b9382811000 2044 ----- 000000000012d000 0fd:00002 libcrypto.so.0.9.8e
00002b9382a10000 132 rw--- 000000000012c000 0fd:00002 libcrypto.so.0.9.8e
00002b9382a31000 16 rw--- 00002b9382a31000 000:00000 [ anon ]
00002b9382a35000 176 r-x-- 0000000000000000 0fd:00002 libgssapi_krb5.so.2.2
00002b9382a61000 2048 ----- 000000000002c000 0fd:00002 libgssapi_krb5.so.2.2
00002b9382c61000 8 rw--- 000000000002c000 0fd:00002 libgssapi_krb5.so.2.2
00002b9382c63000 4 rw--- 00002b9382c63000 000:00000 [ anon ]
00002b9382c64000 580 r-x-- 0000000000000000 0fd:00002 libkrb5.so.3.3
00002b9382cf5000 2048 ----- 0000000000091000 0fd:00002 libkrb5.so.3.3
00002b9382ef5000 16 rw--- 0000000000091000 0fd:00002 libkrb5.so.3.3
00002b9382ef9000 8 r-x-- 0000000000000000 0fd:00002 libcom_err.so.2.1
00002b9382efb000 2044 ----- 0000000000002000 0fd:00002 libcom_err.so.2.1
00002b93830fa000 4 rw--- 0000000000001000 0fd:00002 libcom_err.so.2.1
00002b93830fb000 144 r-x-- 0000000000000000 0fd:00002 libk5crypto.so.3.1
00002b938311f000 2044 ----- 0000000000024000 0fd:00002 libk5crypto.so.3.1
00002b938331e000 8 rw--- 0000000000023000 0fd:00002 libk5crypto.so.3.1
00002b9383320000 4 rw--- 00002b9383320000 000:00000 [ anon ]
00002b9383321000 80 r-x-- 0000000000000000 0fd:00002 libz.so.1.2.3
00002b9383335000 2044 ----- 0000000000014000 0fd:00002 libz.so.1.2.3
00002b9383534000 4 rw--- 0000000000013000 0fd:00002 libz.so.1.2.3
00002b9383535000 32 r-x-- 0000000000000000 0fd:00002 libkrb5support.so.0.1
00002b938353d000 2044 ----- 0000000000008000 0fd:00002 libkrb5support.so.0.1
00002b938373c000 4 rw--- 0000000000007000 0fd:00002 libkrb5support.so.0.1
00002b938373d000 8 r-x-- 0000000000000000 0fd:00002 libkeyutils-1.2.so
00002b938373f000 2044 ----- 0000000000002000 0fd:00002 libkeyutils-1.2.so
00002b938393e000 4 rw--- 0000000000001000 0fd:00002 libkeyutils-1.2.so
00002b938393f000 12 rw--- 00002b938393f000 000:00000 [ anon ]
00002b9383942000 8 r-x-- 0000000000000000 0fd:00002 mod_auth_basic.so
00002b9383944000 2044 ----- 0000000000002000 0fd:00002 mod_auth_basic.so
00002b9383b43000 8 rw--- 0000000000001000 0fd:00002 mod_auth_basic.so
00002b9383b45000 24 r-x-- 0000000000000000 0fd:00002 mod_auth_digest.so
00002b9383b4b000 2044 ----- 0000000000006000 0fd:00002 mod_auth_digest.so
00002b9383d4a000 8 rw--- 0000000000005000 0fd:00002 mod_auth_digest.so
00002b9383d4c000 8 r-x-- 0000000000000000 0fd:00002 mod_authn_file.so
00002b9383d4e000 2044 ----- 0000000000002000 0fd:00002 mod_authn_file.so
00002b9383f4d000 8 rw--- 0000000000001000 0fd:00002 mod_authn_file.so
00002b9383f4f000 8 r-x-- 0000000000000000 0fd:00002 mod_authn_alias.so
00002b9383f51000 2044 ----- 0000000000002000 0fd:00002 mod_authn_alias.so
00002b9384150000 8 rw--- 0000000000001000 0fd:00002 mod_authn_alias.so
00002b9384152000 4 r-x-- 0000000000000000 0fd:00002 mod_authn_anon.so
00002b9384153000 2048 ----- 0000000000001000 0fd:00002 mod_authn_anon.so
00002b9384353000 8 rw--- 0000000000001000 0fd:00002 mod_authn_anon.so
00002b9384355000 4 r-x-- 0000000000000000 0fd:00002 mod_authn_dbm.so
00002b9384356000 2048 ----- 0000000000001000 0fd:00002 mod_authn_dbm.so
00002b9384556000 8 rw--- 0000000000001000 0fd:00002 mod_authn_dbm.so
00002b9384558000 4 r-x-- 0000000000000000 0fd:00002 mod_authn_default.so
00002b9384559000 2044 ----- 0000000000001000 0fd:00002 mod_authn_default.so
00002b9384758000 8 rw--- 0000000000000000 0fd:00002 mod_authn_default.so
00002b938475a000 8 r-x-- 0000000000000000 0fd:00002 mod_authz_host.so
00002b938475c000 2044 ----- 0000000000002000 0fd:00002 mod_authz_host.so
00002b938495b000 8 rw--- 0000000000001000 0fd:00002 mod_authz_host.so
00002b938495d000 4 r-x-- 0000000000000000 0fd:00002 mod_authz_user.so
00002b938495e000 2044 ----- 0000000000001000 0fd:00002 mod_authz_user.so
00002b9384b5d000 8 rw--- 0000000000000000 0fd:00002 mod_authz_user.so
00002b9384b5f000 8 r-x-- 0000000000000000 0fd:00002 mod_authz_owner.so
00002b9384b61000 2044 ----- 0000000000002000 0fd:00002 mod_authz_owner.so
00002b9384d60000 8 rw--- 0000000000001000 0fd:00002 mod_authz_owner.so
00002b9384d62000 8 r-x-- 0000000000000000 0fd:00002 mod_authz_groupfile.so
00002b9384d64000 2044 ----- 0000000000002000 0fd:00002 mod_authz_groupfile.so
00002b9384f63000 8 rw--- 0000000000001000 0fd:00002 mod_authz_groupfile.so
00002b9384f65000 8 r-x-- 0000000000000000 0fd:00002 mod_authz_dbm.so
00002b9384f67000 2044 ----- 0000000000002000 0fd:00002 mod_authz_dbm.so
00002b9385166000 8 rw--- 0000000000001000 0fd:00002 mod_authz_dbm.so
00002b9385168000 4 r-x-- 0000000000000000 0fd:00002 mod_authz_default.so
00002b9385169000 2044 ----- 0000000000001000 0fd:00002 mod_authz_default.so
00002b9385368000 8 rw--- 0000000000000000 0fd:00002 mod_authz_default.so
00002b938536a000 48 r-x-- 0000000000000000 0fd:00002 mod_ldap.so
00002b9385376000 2044 ----- 000000000000c000 0fd:00002 mod_ldap.so
00002b9385575000 8 rw--- 000000000000b000 0fd:00002 mod_ldap.so
00002b9385577000 24 r-x-- 0000000000000000 0fd:00002 mod_authnz_ldap.so
00002b938557d000 2048 ----- 0000000000006000 0fd:00002 mod_authnz_ldap.so
00002b938577d000 8 rw--- 0000000000006000 0fd:00002 mod_authnz_ldap.so
00002b938577f000 36 r-x-- 0000000000000000 0fd:00002 mod_include.so
00002b9385788000 2048 ----- 0000000000009000 0fd:00002 mod_include.so
00002b9385988000 8 rw--- 0000000000009000 0fd:00002 mod_include.so
00002b938598a000 20 r-x-- 0000000000000000 0fd:00002 mod_log_config.so
00002b938598f000 2044 ----- 0000000000005000 0fd:00002 mod_log_config.so
00002b9385b8e000 8 rw--- 0000000000004000 0fd:00002 mod_log_config.so
00002b9385b90000 8 r-x-- 0000000000000000 0fd:00002 mod_logio.so
00002b9385b92000 2044 ----- 0000000000002000 0fd:00002 mod_logio.so
00002b9385d91000 8 rw--- 0000000000001000 0fd:00002 mod_logio.so
00002b9385d93000 4 r-x-- 0000000000000000 0fd:00002 mod_env.so
00002b9385d94000 2048 ----- 0000000000001000 0fd:00002 mod_env.so
00002b9385f94000 8 rw--- 0000000000001000 0fd:00002 mod_env.so
00002b9385f96000 16 r-x-- 0000000000000000 0fd:00002 mod_ext_filter.so
00002b9385f9a000 2044 ----- 0000000000004000 0fd:00002 mod_ext_filter.so
00002b9386199000 8 rw--- 0000000000003000 0fd:00002 mod_ext_filter.so
00002b938619b000 20 r-x-- 0000000000000000 0fd:00002 mod_mime_magic.so
00002b93861a0000 2044 ----- 0000000000005000 0fd:00002 mod_mime_magic.so
00002b938639f000 8 rw--- 0000000000004000 0fd:00002 mod_mime_magic.so
00002b93863a1000 8 r-x-- 0000000000000000 0fd:00002 mod_expires.so
00002b93863a3000 2044 ----- 0000000000002000 0fd:00002 mod_expires.so
00002b93865a2000 8 rw--- 0000000000001000 0fd:00002 mod_expires.so
00002b93865a4000 20 r-x-- 0000000000000000 0fd:00002 mod_deflate.so
00002b93865a9000 2044 ----- 0000000000005000 0fd:00002 mod_deflate.so
00002b93867a8000 8 rw--- 0000000000004000 0fd:00002 mod_deflate.so
00002b93867aa000 12 r-x-- 0000000000000000 0fd:00002 mod_headers.so
00002b93867ad000 2048 ----- 0000000000003000 0fd:00002 mod_headers.so
00002b93869ad000 8 rw--- 0000000000003000 0fd:00002 mod_headers.so
00002b93869af000 8 r-x-- 0000000000000000 0fd:00002 mod_usertrack.so
00002b93869b1000 2048 ----- 0000000000002000 0fd:00002 mod_usertrack.so
00002b9386bb1000 8 rw--- 0000000000002000 0fd:00002 mod_usertrack.so
00002b9386bb3000 8 r-x-- 0000000000000000 0fd:00002 mod_setenvif.so
00002b9386bb5000 2048 ----- 0000000000002000 0fd:00002 mod_setenvif.so
00002b9386db5000 8 rw--- 0000000000002000 0fd:00002 mod_setenvif.so
00002b9386db7000 16 r-x-- 0000000000000000 0fd:00002 mod_mime.so
00002b9386dbb000 2044 ----- 0000000000004000 0fd:00002 mod_mime.so
00002b9386fba000 8 rw--- 0000000000003000 0fd:00002 mod_mime.so
00002b9386fbc000 84 r-x-- 0000000000000000 0fd:00002 mod_dav.so
00002b9386fd1000 2044 ----- 0000000000015000 0fd:00002 mod_dav.so
00002b93871d0000 8 rw--- 0000000000014000 0fd:00002 mod_dav.so
00002b93871d2000 16 r-x-- 0000000000000000 0fd:00002 mod_status.so
00002b93871d6000 2044 ----- 0000000000004000 0fd:00002 mod_status.so
00002b93873d5000 8 rw--- 0000000000003000 0fd:00002 mod_status.so
00002b93873d7000 32 r-x-- 0000000000000000 0fd:00002 mod_autoindex.so
00002b93873df000 2044 ----- 0000000000008000 0fd:00002 mod_autoindex.so
00002b93875de000 8 rw--- 0000000000007000 0fd:00002 mod_autoindex.so
00002b93875e0000 16 r-x-- 0000000000000000 0fd:00002 mod_info.so
00002b93875e4000 2044 ----- 0000000000004000 0fd:00002 mod_info.so
00002b93877e3000 8 rw--- 0000000000003000 0fd:00002 mod_info.so
00002b93877e5000 44 r-x-- 0000000000000000 0fd:00002 mod_dav_fs.so
00002b93877f0000 2044 ----- 000000000000b000 0fd:00002 mod_dav_fs.so
00002b93879ef000 8 rw--- 000000000000a000 0fd:00002 mod_dav_fs.so
00002b93879f1000 8 r-x-- 0000000000000000 0fd:00002 mod_vhost_alias.so
00002b93879f3000 2044 ----- 0000000000002000 0fd:00002 mod_vhost_alias.so
00002b9387bf2000 8 rw--- 0000000000001000 0fd:00002 mod_vhost_alias.so
00002b9387bf4000 28 r-x-- 0000000000000000 0fd:00002 mod_negotiation.so
00002b9387bfb000 2044 ----- 0000000000007000 0fd:00002 mod_negotiation.so
00002b9387dfa000 8 rw--- 0000000000006000 0fd:00002 mod_negotiation.so
00002b9387dfc000 8 r-x-- 0000000000000000 0fd:00002 mod_dir.so
00002b9387dfe000 2044 ----- 0000000000002000 0fd:00002 mod_dir.so
00002b9387ffd000 8 rw--- 0000000000001000 0fd:00002 mod_dir.so
00002b9387fff000 8 r-x-- 0000000000000000 0fd:00002 mod_actions.so
00002b9388001000 2044 ----- 0000000000002000 0fd:00002 mod_actions.so
00002b9388200000 8 rw--- 0000000000001000 0fd:00002 mod_actions.so
00002b9388202000 8 r-x-- 0000000000000000 0fd:00002 mod_speling.so
00002b9388204000 2048 ----- 0000000000002000 0fd:00002 mod_speling.so
00002b9388404000 8 rw--- 0000000000002000 0fd:00002 mod_speling.so
00002b9388406000 8 r-x-- 0000000000000000 0fd:00002 mod_userdir.so
00002b9388408000 2044 ----- 0000000000002000 0fd:00002 mod_userdir.so
00002b9388607000 8 rw--- 0000000000001000 0fd:00002 mod_userdir.so
00002b9388609000 12 r-x-- 0000000000000000 0fd:00002 mod_alias.so
00002b938860c000 2044 ----- 0000000000003000 0fd:00002 mod_alias.so
00002b938880b000 8 rw--- 0000000000002000 0fd:00002 mod_alias.so
00002b938880d000 56 r-x-- 0000000000000000 0fd:00002 mod_rewrite.so
00002b938881b000 2044 ----- 000000000000e000 0fd:00002 mod_rewrite.so
00002b9388a1a000 8 rw--- 000000000000d000 0fd:00002 mod_rewrite.so
00002b9388a1c000 76 r-x-- 0000000000000000 0fd:00002 mod_proxy.so
00002b9388a2f000 2044 ----- 0000000000013000 0fd:00002 mod_proxy.so
00002b9388c2e000 8 rw--- 0000000000012000 0fd:00002 mod_proxy.so
00002b9388c30000 20 r-x-- 0000000000000000 0fd:00002 mod_proxy_balancer.so
00002b9388c35000 2048 ----- 0000000000005000 0fd:00002 mod_proxy_balancer.so
00002b9388e35000 8 rw--- 0000000000005000 0fd:00002 mod_proxy_balancer.so
00002b9388e37000 28 r-x-- 0000000000000000 0fd:00002 mod_proxy_ftp.so
00002b9388e3e000 2044 ----- 0000000000007000 0fd:00002 mod_proxy_ftp.so
00002b938903d000 8 rw--- 0000000000006000 0fd:00002 mod_proxy_ftp.so
00002b938903f000 28 r-x-- 0000000000000000 0fd:00002 mod_proxy_http.so
00002b9389046000 2048 ----- 0000000000007000 0fd:00002 mod_proxy_http.so
00002b9389246000 8 rw--- 0000000000007000 0fd:00002 mod_proxy_http.so
00002b9389248000 8 r-x-- 0000000000000000 0fd:00002 mod_proxy_connect.so
00002b938924a000 2044 ----- 0000000000002000 0fd:00002 mod_proxy_connect.so
00002b9389449000 8 rw--- 0000000000001000 0fd:00002 mod_proxy_connect.so
00002b938944b000 1024 rw--- 00002b938944b000 000:00000 [ anon ]
00002b9389639000 536 rw--- 00002b9389639000 000:00000 [ anon ]
00002b93896bf000 28 r-x-- 0000000000000000 0fd:00002 mod_cache.so
00002b93896c6000 2044 ----- 0000000000007000 0fd:00002 mod_cache.so
00002b93898c5000 8 rw--- 0000000000006000 0fd:00002 mod_cache.so
00002b93898c7000 4 r-x-- 0000000000000000 0fd:00002 mod_suexec.so
00002b93898c8000 2048 ----- 0000000000001000 0fd:00002 mod_suexec.so
00002b9389ac8000 8 rw--- 0000000000001000 0fd:00002 mod_suexec.so
00002b9389aca000 16 r-x-- 0000000000000000 0fd:00002 mod_disk_cache.so
00002b9389ace000 2048 ----- 0000000000004000 0fd:00002 mod_disk_cache.so
00002b9389cce000 8 rw--- 0000000000004000 0fd:00002 mod_disk_cache.so
00002b9389cd0000 8 r-x-- 0000000000000000 0fd:00002 mod_file_cache.so
00002b9389cd2000 2044 ----- 0000000000002000 0fd:00002 mod_file_cache.so
00002b9389ed1000 8 rw--- 0000000000001000 0fd:00002 mod_file_cache.so
00002b9389ed3000 24 r-x-- 0000000000000000 0fd:00002 mod_mem_cache.so
00002b9389ed9000 2044 ----- 0000000000006000 0fd:00002 mod_mem_cache.so
00002b938a0d8000 8 rw--- 0000000000005000 0fd:00002 mod_mem_cache.so
00002b938a0da000 20 r-x-- 0000000000000000 0fd:00002 mod_cgi.so
00002b938a0df000 2048 ----- 0000000000005000 0fd:00002 mod_cgi.so
00002b938a2df000 8 rw--- 0000000000005000 0fd:00002 mod_cgi.so
00002b938a2e1000 8 r-x-- 0000000000000000 0fd:00002 mod_version.so
00002b938a2e3000 2044 ----- 0000000000002000 0fd:00002 mod_version.so
00002b938a4e2000 8 rw--- 0000000000001000 0fd:00002 mod_version.so
00002b938a4e4000 1024 rw--- 00002b938a4e4000 000:00000 [ anon ]
00002b938a5e4000 3392 r-x-- 0000000000000000 0fd:00002 libphp5.so
00002b938a934000 2044 ----- 0000000000350000 0fd:00002 libphp5.so
00002b938ab33000 344 rw--- 000000000034f000 0fd:00002 libphp5.so
00002b938ab89000 108 rw--- 00002b938ab89000 000:00000 [ anon ]
00002b938abae000 224 r-x-- 0000000000000000 0fd:00002 libgmp.so.3.3.3
00002b938abe6000 2048 ----- 0000000000038000 0fd:00002 libgmp.so.3.3.3
00002b938ade6000 4 rw--- 0000000000038000 0fd:00002 libgmp.so.3.3.3
00002b938ade7000 60 r-x-- 0000000000000000 0fd:00002 libbz2.so.1.0.3
00002b938adf6000 2044 ----- 000000000000f000 0fd:00002 libbz2.so.1.0.3
00002b938aff5000 8 rw--- 000000000000e000 0fd:00002 libbz2.so.1.0.3
00002b938aff7000 28 r-x-- 0000000000000000 0fd:00002 librt-2.5.so
00002b938affe000 2048 ----- 0000000000007000 0fd:00002 librt-2.5.so
00002b938b1fe000 4 r---- 0000000000007000 0fd:00002 librt-2.5.so
00002b938b1ff000 4 rw--- 0000000000008000 0fd:00002 librt-2.5.so
00002b938b200000 84 r-x-- 0000000000000000 0fd:00002 libnsl-2.5.so
00002b938b215000 2044 ----- 0000000000015000 0fd:00002 libnsl-2.5.so
00002b938b414000 4 r---- 0000000000014000 0fd:00002 libnsl-2.5.so
00002b938b415000 4 rw--- 0000000000015000 0fd:00002 libnsl-2.5.so
00002b938b416000 8 rw--- 00002b938b416000 000:00000 [ anon ]
00002b938b418000 1232 r-x-- 0000000000000000 0fd:00002 libxml2.so.2.6.26
00002b938b54c000 2048 ----- 0000000000134000 0fd:00002 libxml2.so.2.6.26
00002b938b74c000 36 rw--- 0000000000134000 0fd:00002 libxml2.so.2.6.26
00002b938b755000 4 rw--- 00002b938b755000 000:00000 [ anon ]
00002b938b756000 32 r-x-- 0000000000000000 0fd:00002 mod_proxy_ajp.so
00002b938b75e000 2044 ----- 0000000000008000 0fd:00002 mod_proxy_ajp.so
00002b938b95d000 8 rw--- 0000000000007000 0fd:00002 mod_proxy_ajp.so
00002b938b969000 40 r-x-- 0000000000000000 0fd:00002 libnss_files-2.5.so
00002b938b973000 2044 ----- 000000000000a000 0fd:00002 libnss_files-2.5.so
00002b938bb72000 4 r---- 0000000000009000 0fd:00002 libnss_files-2.5.so
00002b938bb73000 4 rw--- 000000000000a000 0fd:00002 libnss_files-2.5.so
00002b938bb74000 128 r-x-- 0000000000000000 0fd:00002 apc.so
00002b938bb94000 2048 ----- 0000000000020000 0fd:00002 apc.so
00002b938bd94000 12 rw--- 0000000000020000 0fd:00002 apc.so
00002b938bd97000 36 rw--- 00002b938bd97000 000:00000 [ anon ]
00002b938bda0000 60 r-x-- 0000000000000000 0fd:00002 curl.so
00002b938bdaf000 2044 ----- 000000000000f000 0fd:00002 curl.so
00002b938bfae000 8 rw--- 000000000000e000 0fd:00002 curl.so
00002b938bfba000 240 r-x-- 0000000000000000 0fd:00002 libcurl.so.3.0.0
00002b938bff6000 2044 ----- 000000000003c000 0fd:00002 libcurl.so.3.0.0
00002b938c1f5000 8 rw--- 000000000003b000 0fd:00002 libcurl.so.3.0.0
00002b938c1f7000 196 r-x-- 0000000000000000 0fd:00002 libidn.so.11.5.19
00002b938c228000 2044 ----- 0000000000031000 0fd:00002 libidn.so.11.5.19
00002b938c427000 4 rw--- 0000000000030000 0fd:00002 libidn.so.11.5.19
00002b938c428000 144 r-x-- 0000000000000000 0fd:00002 dom.so
00002b938c44c000 2044 ----- 0000000000024000 0fd:00002 dom.so
00002b938c64b000 24 rw--- 0000000000023000 0fd:00002 dom.so
00002b938c651000 2312 r-x-- 0000000000000000 0fd:00002 fileinfo.so
00002b938c893000 2044 ----- 0000000000242000 0fd:00002 fileinfo.so
00002b938ca92000 4 rw--- 0000000000241000 0fd:00002 fileinfo.so
00002b938ca93000 4 rw--- 00002b938ca93000 000:00000 [ anon ]
00002b938ca94000 300 r-x-- 0000000000000000 0fd:00002 gd.so
00002b938cadf000 2044 ----- 000000000004b000 0fd:00002 gd.so
00002b938ccde000 28 rw--- 000000000004a000 0fd:00002 gd.so
00002b938cce5000 16 rw--- 00002b938cce5000 000:00000 [ anon ]
00002b938ccf3000 264 r-x-- 0000000000000000 0fd:00002 libt1.so.5.1.1
00002b938cd35000 2044 ----- 0000000000042000 0fd:00002 libt1.so.5.1.1
00002b938cf34000 16 rw--- 0000000000041000 0fd:00002 libt1.so.5.1.1
00002b938cf38000 88 rw--- 00002b938cf38000 000:00000 [ anon ]
00002b938cf4e000 508 r-x-- 0000000000000000 0fd:00002 libfreetype.so.6.3.10
00002b938cfcd000 2048 ----- 000000000007f000 0fd:00002 libfreetype.so.6.3.10
00002b938d1cd000 20 rw--- 000000000007f000 0fd:00002 libfreetype.so.6.3.10
00002b938d1d2000 1044 r-x-- 0000000000000000 0fd:00002 libX11.so.6.2.0
00002b938d2d7000 2048 ----- 0000000000105000 0fd:00002 libX11.so.6.2.0
00002b938d4d7000 28 rw--- 0000000000105000 0fd:00002 libX11.so.6.2.0
00002b938d4de000 64 r-x-- 0000000000000000 0fd:00002 libXpm.so.4.11.0
00002b938d4ee000 2048 ----- 0000000000010000 0fd:00002 libXpm.so.4.11.0
00002b938d6ee000 4 rw--- 0000000000010000 0fd:00002 libXpm.so.4.11.0
00002b938d6ef000 140 r-x-- 0000000000000000 0fd:00002 libpng12.so.0.10.0
00002b938d712000 2048 ----- 0000000000023000 0fd:00002 libpng12.so.0.10.0
00002b938d912000 4 rw--- 0000000000023000 0fd:00002 libpng12.so.0.10.0
00002b938d913000 132 r-x-- 0000000000000000 0fd:00002 libjpeg.so.62.0.0
00002b938d934000 2044 ----- 0000000000021000 0fd:00002 libjpeg.so.62.0.0
00002b938db33000 4 rw--- 0000000000020000 0fd:00002 libjpeg.so.62.0.0
00002b938db34000 8 r-x-- 0000000000000000 0fd:00002 libXau.so.6.0.0
00002b938db36000 2044 ----- 0000000000002000 0fd:00002 libXau.so.6.0.0
00002b938dd35000 4 rw--- 0000000000001000 0fd:00002 libXau.so.6.0.0
00002b938dd36000 20 r-x-- 0000000000000000 0fd:00002 libXdmcp.so.6.0.0
00002b938dd3b000 2044 ----- 0000000000005000 0fd:00002 libXdmcp.so.6.0.0
00002b938df3a000 4 rw--- 0000000000004000 0fd:00002 libXdmcp.so.6.0.0
00002b938df3b000 32 r-x-- 0000000000000000 0fd:00002 json.so
00002b938df43000 2044 ----- 0000000000008000 0fd:00002 json.so
00002b938e142000 4 rw--- 0000000000007000 0fd:00002 json.so
00002b938e143000 2052 r-x-- 0000000000000000 0fd:00002 mbstring.so
00002b938e344000 2044 ----- 0000000000201000 0fd:00002 mbstring.so
00002b938e543000 48 rw--- 0000000000200000 0fd:00002 mbstring.so
00002b938e54f000 44 r-x-- 0000000000000000 0fd:00002 mysql.so
00002b938e55a000 2048 ----- 000000000000b000 0fd:00002 mysql.so
00002b938e75a000 8 rw--- 000000000000b000 0fd:00002 mysql.so
00002b938e766000 2384 r-x-- 0000000000000000 0fd:00002 libmysqlclient.so.18.0.0
00002b938e9ba000 2044 ----- 0000000000254000 0fd:00002 libmysqlclient.so.18.0.0
00002b938ebb9000 516 rw--- 0000000000253000 0fd:00002 libmysqlclient.so.18.0.0
00002b938ec3a000 20 rw--- 00002b938ec3a000 000:00000 [ anon ]
00002b938ec3f000 920 r-x-- 0000000000000000 0fd:00002 libstdc++.so.6.0.8
00002b938ed25000 2044 ----- 00000000000e6000 0fd:00002 libstdc++.so.6.0.8
00002b938ef24000 24 r---- 00000000000e5000 0fd:00002 libstdc++.so.6.0.8
00002b938ef2a000 12 rw--- 00000000000eb000 0fd:00002 libstdc++.so.6.0.8
00002b938ef2d000 72 rw--- 00002b938ef2d000 000:00000 [ anon ]
00002b938ef3f000 52 r-x-- 0000000000000000 0fd:00002 libgcc_s-4.1.2-20080825.so.1
00002b938ef4c000 2048 ----- 000000000000d000 0fd:00002 libgcc_s-4.1.2-20080825.so.1
00002b938f14c000 4 rw--- 000000000000d000 0fd:00002 libgcc_s-4.1.2-20080825.so.1
00002b938f14d000 108 r-x-- 0000000000000000 0fd:00002 mysqli.so
00002b938f168000 2048 ----- 000000000001b000 0fd:00002 mysqli.so
00002b938f368000 20 rw--- 000000000001b000 0fd:00002 mysqli.so
00002b938f36d000 4 rw--- 00002b938f36d000 000:00000 [ anon ]
00002b938f36e000 88 r-x-- 0000000000000000 0fd:00002 pdo.so
00002b938f384000 2044 ----- 0000000000016000 0fd:00002 pdo.so
00002b938f583000 12 rw--- 0000000000015000 0fd:00002 pdo.so
00002b938f586000 28 r-x-- 0000000000000000 0fd:00002 pdo_mysql.so
00002b938f58d000 2048 ----- 0000000000007000 0fd:00002 pdo_mysql.so
00002b938f78d000 4 rw--- 0000000000007000 0fd:00002 pdo_mysql.so
00002b938f78e000 24 r-x-- 0000000000000000 0fd:00002 pdo_sqlite.so
00002b938f794000 2044 ----- 0000000000006000 0fd:00002 pdo_sqlite.so
00002b938f993000 4 rw--- 0000000000005000 0fd:00002 pdo_sqlite.so
00002b938f99e000 356 r-x-- 0000000000000000 0fd:00002 libsqlite3.so.0.8.6
00002b938f9f7000 2044 ----- 0000000000059000 0fd:00002 libsqlite3.so.0.8.6
00002b938fbf6000 12 rw--- 0000000000058000 0fd:00002 libsqlite3.so.0.8.6
00002b938fbf9000 240 r-x-- 0000000000000000 0fd:00002 phar.so
00002b938fc35000 2048 ----- 000000000003c000 0fd:00002 phar.so
00002b938fe35000 12 rw--- 000000000003c000 0fd:00002 phar.so
00002b938fe38000 304 r-x-- 0000000000000000 0fd:00002 soap.so
00002b938fe84000 2044 ----- 000000000004c000 0fd:00002 soap.so
00002b9390083000 16 rw--- 000000000004b000 0fd:00002 soap.so
00002b9390087000 28 r-x-- 0000000000000000 0fd:00002 wddx.so
00002b939008e000 2048 ----- 0000000000007000 0fd:00002 wddx.so
00002b939028e000 4 rw--- 0000000000007000 0fd:00002 wddx.so
00002b939028f000 24 r-x-- 0000000000000000 0fd:00002 xmlreader.so
00002b9390295000 2044 ----- 0000000000006000 0fd:00002 xmlreader.so
00002b9390494000 8 rw--- 0000000000005000 0fd:00002 xmlreader.so
00002b9390496000 32 r-x-- 0000000000000000 0fd:00002 xmlwriter.so
00002b939049e000 2044 ----- 0000000000008000 0fd:00002 xmlwriter.so
00002b939069d000 16 rw--- 0000000000007000 0fd:00002 xmlwriter.so
00002b93906a1000 28 r-x-- 0000000000000000 0fd:00002 xsl.so
00002b93906a8000 2048 ----- 0000000000007000 0fd:00002 xsl.so
00002b93908a8000 4 rw--- 0000000000007000 0fd:00002 xsl.so
00002b93908b3000 68 r-x-- 0000000000000000 0fd:00002 libexslt.so.0.8.13
00002b93908c4000 2048 ----- 0000000000011000 0fd:00002 libexslt.so.0.8.13
00002b9390ac4000 4 rw--- 0000000000011000 0fd:00002 libexslt.so.0.8.13
00002b9390ac5000 208 r-x-- 0000000000000000 0fd:00002 libxslt.so.1.1.17
00002b9390af9000 2044 ----- 0000000000034000 0fd:00002 libxslt.so.1.1.17
00002b9390cf8000 8 rw--- 0000000000033000 0fd:00002 libxslt.so.1.1.17
00002b9390cfa000 444 r-x-- 0000000000000000 0fd:00002 libgcrypt.so.11.5.2
00002b9390d69000 2044 ----- 000000000006f000 0fd:00002 libgcrypt.so.11.5.2
00002b9390f68000 16 rw--- 000000000006e000 0fd:00002 libgcrypt.so.11.5.2
00002b9390f6c000 12 r-x-- 0000000000000000 0fd:00002 libgpg-error.so.0.3.0
00002b9390f6f000 2044 ----- 0000000000003000 0fd:00002 libgpg-error.so.0.3.0
00002b939116e000 4 rw--- 0000000000002000 0fd:00002 libgpg-error.so.0.3.0
00002b939116f000 80 r-x-- 0000000000000000 0fd:00002 zip.so
00002b9391183000 2044 ----- 0000000000014000 0fd:00002 zip.so
00002b9391382000 12 rw--- 0000000000013000 0fd:00002 zip.so
00002b9391385000 1024 rw--- 00002b9391385000 000:00000 [ anon ]
00002b9391485000 32768 rw-s- 0000000000000000 000:0007c [ anon ]
00002b9393485000 4 ----- 00002b9393485000 000:00000 [ anon ]
00002b9393486000 12288 rw--- 00002b9393486000 000:00000 [ anon ]
00002b9394086000 55136 r---- 0000000000000000 0fd:00002 locale-archive
00002b939765e000 2048 rw--- 00002b939765e000 000:00000 [ anon ]
00002b939785e000 28 r--s- 0000000000000000 0fd:00002 gconv-modules.cache
00002b9397868000 16 r-x-- 0000000000000000 0fd:00002 libnss_dns-2.5.so
00002b939786c000 2044 ----- 0000000000004000 0fd:00002 libnss_dns-2.5.so
00002b9397a6b000 4 r---- 0000000000003000 0fd:00002 libnss_dns-2.5.so
00002b9397a6c000 4 rw--- 0000000000004000 0fd:00002 libnss_dns-2.5.so
00002b9397a6d000 4 r-x-- 0000000000000000 0fd:00002 ISO8859-1.so
00002b9397a6e000 2048 ----- 0000000000001000 0fd:00002 ISO8859-1.so
00002b9397c6e000 8 rw--- 0000000000001000 0fd:00002 ISO8859-1.so
00007fff63676000 84 rw--- 00007ffffffe9000 000:00000 [ stack ]
00007fff637fb000 12 r-x-- 00007fff637fb000 000:00000 [ anon ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 401636K writeable/private: 23188K shared: 32984K
At the very bottom of the pmap, is a summary breaking down memory use into mapped, private and shared memory.
If we key in on the writeable/private number, we come away with an understanding that this particular process is using about 23mb of memory. If we assume that most of the other apache processes will be in the same range, then our total memory use for 20 processes, is going to be about 500mb+. While not completely accurate, it's closer to the truth than if we just looked at what ps was telling us and added those numbers up.
The other thing that should be obvious in scanning through the pmap, is that there are a lot of different libraries being used, and also a lot of apache modules. This is a place where you can start looking at the list, and asking some questions about what those modules do, and whether or not they are appropriate for your site.
I'll suggest if you want to explore memory utilization further, that you locate a copy of this amazing python memory use script written by Pádraig Brady, who was an engineer for Redhat and now works for Facebook.
It reports the total memory use by a process -- in essence summarizing the use by all the forked children. Give it a try.
Armed with this information you now have a way of determining how to configure your apache server conf file, to make the most efficient use of available server memory, as well as gain insight into whether you have enough resources to serve the amount of traffic you expect and encounter.
#1 - James Cantando 2019-01-04 00:52 - (Reply)
So, in reading this I come up with the question "Would it be a good idea then to set a high max child and a low MaxRequests to allow serving under load but locking memory up for as short a time as possible? Let's say values of 100 and 10, respectively.
#2 - David Rolston 2019-06-21 06:12 - (Reply)
There is a significant cost to creating a new process, so trying to force process recycling isn't going to solve any problems. The best thing to do is to go through the list of apache modules and remove those that aren't required by your site. Typically there are numerous apache modules that you don't need.