在将我们的 Web 服务器从 Debian 迁移到 Ubuntu 之后,我们注意到 uWSGI 主进程和工作进程使用的内存量 (RSS) 大幅增加。uWSGI (1.9.13) 的版本保持不变。
我使用 pmap 来检查每个进程的内存使用情况。在 Debian 下,主进程如下所示:
Address RSS Dirty Mode Mapping
---------------- ------ ------ ------
kB 15976 11316
0000000001a880000 7308 7308 rw--- [anon
400000 1608 0 r-x-- uwsgi
00007ff16c5a70000 772 772 rw--- [anon
00007ff176c3a0000 668 0 r-x-- libcrypto.so.0.9.8
00007ff175f010000 548 0 r-x-- libc-2.11.3.so
00007ff177fc70000 512 512 rw--- [anon
00007ff17807b0000 512 512 rw--- [anon
00007ff1759e50000 356 0 r-x-- libstdc++.so.6.0.13
80 268 184 rw--- uwsgi
我只显示最相关的内存块,RSS 下的数字以千字节为单位。
虽然现在在 Ubuntu 下 uWSGI 已经为自己分配了更多的内存。
Address RSS Dirty Mode Mapping
---------------- ------ ------ ------
kB 24216 19196
2401000 15508 15508 rw--- [ anon ]
00007f3094e86000 1648 0 r-x-- libpython2.7.so.1.0
00007f308c6ce000 772 772 rw--- [ anon ]
00007f3094abe000 680 0 r-x-- libc-2.17.so
00007f309595d000 612 0 r-x-- libcrypto.so.1.0.0
00007f3096de4000 512 512 rw--- [ anon ]
00007f3096e67000 512 512 rw--- [ anon ]
400000 480 0 r-x-- uwsgi
00007f30945b3000 352 0 r-x-- libstdc++.so.6.0.17
00007f309532e000 340 248 rw--- libpython2.7.so.1.0
加载到这些主进程中的应用程序的配置和类型在其他方面是相同的。内核版本对于 Debian 是 2.6.32-5-xen-amd64,对于 Ubuntu 是 3.8.0-19-generic。
有谁知道为什么每个主人会为自己分配另外 8megs 的内存?
发现问题,Ubuntu自带的Python 2.7系统版本导致uWSGI进程占用更多内存。编译一个新版本的 Python 并使用它来启动 uWSGI Emperor 解决了这个问题。
编译 Python 和安装 uWSGI 可以在 Ubuntu 13.04 上使用以下命令实现。