在将我们的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 rx-- uwsgi 00007ff16c5a70000 772 772 rw--- [anon 00007ff176c3a0000 668 0 rx-- libcrypto.so.0.9.8 00007ff175f010000 548 0 rx-- libc-2.11.3.so 00007ff177fc70000 512 512 rw--- [anon 00007ff17807b0000 512 512 rw--- [anon 00007ff1759e50000 356 0 rx-- 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 rx-- libpython2.7.so.1.0 00007f308c6ce000 772 772 rw--- [ anon ] 00007f3094abe000 680 0 rx-- libc-2.17.so 00007f309595d000 612 0 rx-- libcrypto.so.1.0.0 00007f3096de4000 512 512 rw--- [ anon ] 00007f3096e67000 512 512 rw--- [ anon ] 400000 480 0 rx-- uwsgi 00007f30945b3000 352 0 rx-- libstdc++.so.6.0.17 00007f309532e000 340 248 rw--- libpython2.7.so.1.0
加载到这些主进程中的应用程序的configuration和types是相同的。 Debian的内核版本是2.6.32-5-xen-amd64,Ubuntu的内核版本是3.8.0-19-generic。
有没有人有任何想法,为什么每个主人将分配自己的另一个8meg的内存?
发现问题,Ubuntu自带的Python 2.7系统版本导致uWSGI进程使用更多的内存。 编译一个新版本的Python并使用它来启动uWSGI皇帝解决了这个问题。
编译Python并安装uWSGI可以通过Ubuntu 13.04上的以下命令来实现。
wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2 tar jxf Python-2.7.5.tar.bz2 cd Python-2.7.5/ ./configure --prefix=/opt/python2.7.5 && make && make install cd /opt/python2.7.5/ curl -O http://python-distribute.org/distribute_setup.py bin/python2.7 distribute_setup.py bin/easy_install-2.7 pip bin/pip-2.7 install uwsgi