Debian-Squeeze
從 Debian 遷移到 Ubuntu 後,uWSGI 工作人員/主人的記憶體使用量增加
在將我們的 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 上使用以下命令實現。
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