|
Jorey Bump
list at joreybump.com
Sat Mar 3 15:54:49 EST 2007
Graham Dumpleton wrote:
> 1. Operating System
Slackware Linux 10.2
$ uname -a
Linux degas 2.4.31 #21 Sun Jun 5 19:19:51 PDT 2005 i686 unknown unknown
GNU/Linux
> 2. Size of mod_python.so.
$ ls -las /usr/local/apache2/modules/mod_python.so
1192 -rwxr-xr-x 1 root root 1213776 2007-02-01 11:44
/usr/local/apache2/modules/mod_python.so
> 3. Size of Python library. This should exist in the 'lib/pythonX.Y/config'
> directory of your Python installation. Ie., at same directory level as your
> 'site-packages' directory. It would be called 'libpythonX.Y.a',
> 'libpythonX.Y.so'
> or 'libpythonX.Y.sl'.
ls -las /usr/lib/python2.4/config/libpython2.4.a
1700 -rw-r--r-- 1 root root 1733986 2005-04-11 01:32
/usr/lib/python2.4/config/libpython2.4.a
> 4. Confirm whether mod_python.so uses Python library as static library or
> shared library. On UNIX systems you can use the 'ldd' command on
> mod_python.so to determine this.
$ ldd /usr/local/apache2/modules/mod_python.so
libpthread.so.0 => /lib/libpthread.so.0 (0x40144000)
libdl.so.2 => /lib/libdl.so.2 (0x40196000)
libutil.so.1 => /lib/libutil.so.1 (0x4019a000)
libm.so.6 => /lib/libm.so.6 (0x4019e000)
libc.so.6 => /lib/libc.so.6 (0x401c1000)
/lib/ld-linux.so.2 (0x80000000)
> 5. Work out how much memory Apache uses when mod_python is not being
> loaded. One can use 'top' for this. Hopefully others may suggest better
> ways.
Comment out mod_python in httpd.conf:
# Include conf/local/mod_python.conf
Fully stop then start apache:
# /etc/rc.d/rc.apache stop
# /etc/rc.d/rc.apache start
$ top -U nobody
top - 15:26:01 up 93 days, 5:49, 1 user, load average: 0.00, 0.07, 0.08
Tasks: 69 total, 2 running, 67 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
Mem: 904440k total, 448276k used, 456164k free, 38520k buffers
Swap: 1951856k total, 32408k used, 1919448k free, 111932k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31424 nobody 11 0 7572 7572 7444 S 0.0 0.8 0:00.00 httpd
31425 nobody 13 0 7572 7572 7448 S 0.0 0.8 0:00.00 httpd
31426 nobody 13 0 7572 7572 7448 S 0.0 0.8 0:00.00 httpd
31427 nobody 14 0 7572 7572 7448 S 0.0 0.8 0:00.00 httpd
31428 nobody 17 0 7572 7572 7448 S 0.0 0.8 0:00.00 httpd
> 6. Work out how much memory Apache uses when mod_python is loaded
> but before any requests have occurred. Ensure that no PythonImport
> directives have been used.
Enable mod_python in httpd.conf:
Include conf/local/mod_python.conf
Fully stop then start apache:
# /etc/rc.d/rc.apache stop
# /etc/rc.d/rc.apache start
$ top -U nobody
top - 15:28:43 up 93 days, 5:51, 1 user, load average: 0.00, 0.04, 0.07
Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.4% user, 0.1% system, 0.0% nice, 99.5% idle
Mem: 904440k total, 461256k used, 443184k free, 39208k buffers
Swap: 1951856k total, 32408k used, 1919448k free, 113432k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31480 nobody 11 0 9164 9164 8956 S 0.0 1.0 0:00.00 httpd
31481 nobody 11 0 9164 9164 8960 S 0.0 1.0 0:00.01 httpd
31482 nobody 13 0 9164 9164 8960 S 0.0 1.0 0:00.00 httpd
31483 nobody 13 0 9164 9164 8960 S 0.0 1.0 0:00.00 httpd
31484 nobody 14 0 9164 9164 8960 S 0.0 1.0 0:00.00 httpd
> If eager, use a hello world mod_python example and trigger one request
> against it and see how size changes.
top - 15:29:18 up 93 days, 5:52, 1 user, load average: 0.00, 0.03, 0.07
Tasks: 78 total, 2 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.7% user, 0.3% system, 0.0% nice, 95.0% idle
Mem: 904440k total, 465304k used, 439136k free, 39272k buffers
Swap: 1951856k total, 32408k used, 1919448k free, 113432k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31480 nobody 14 0 13248 12m 8836 S 5.0 1.5 0:00.15 httpd
> 7. If you are also loading lots of other Apache modules, such as mod_perl,
> module for PHP etc, list any significant ones so we might understand what
> else may be using memory. Ideally, do the tests with as little modules
> loaded
> as possible.
# /usr/local/apache2/bin/httpd -M
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
authn_file_module (shared)
authn_default_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_default_module (shared)
auth_basic_module (shared)
auth_digest_module (shared)
filter_module (shared)
deflate_module (shared)
log_config_module (shared)
logio_module (shared)
env_module (shared)
mime_magic_module (shared)
cern_meta_module (shared)
expires_module (shared)
headers_module (shared)
setenvif_module (shared)
ssl_module (shared)
mime_module (shared)
dav_module (shared)
status_module (shared)
autoindex_module (shared)
asis_module (shared)
info_module (shared)
cgi_module (shared)
dav_fs_module (shared)
vhost_alias_module (shared)
negotiation_module (shared)
dir_module (shared)
actions_module (shared)
userdir_module (shared)
alias_module (shared)
rewrite_module (shared)
php5_module (shared)
python_module (shared)
> So, what do other people get?
>
> Is that fact that Python installations often only provide a static Python
> library the culprit?
Not sure, but I noticed something else that I found interesting: Without
mod_python loaded, starting with a complete stop of apache, start, then
several restarts, the top output showed httpd growing by 8 bytes with
each restart. After loading mod_python, then repeating the process,
httpd grew 628 bytes with each restart. Not a lot, but significantly
more than 8 bytes. What are the long term implications of this?
> Is there a better way of analysing memory use than this?
Here's Jim's suggestion for pmap:
$ pmap -d 31480 | grep python
40cd5000 1020 r-x-- 0000000000000000 008:00002 mod_python.so
40dd4000 164 rw--- 00000000000ff000 008:00002 mod_python.so
|