Debian-Squeeze

從 Debian 遷移到 Ubuntu 後,uWSGI 工作人員/主人的記憶體使用量增加

  • July 16, 2013

在將我們的 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

引用自:https://serverfault.com/questions/522913