Назад | Перейти на главную страницу

Увеличение использования памяти рабочими / мастерами uWSGI после перехода с Debian на Ubuntu

После переноса наших веб-серверов с Debian на Ubuntu мы заметили значительное увеличение объема памяти (RSS), используемой ведущими и рабочими процессами uWSGI. Версия 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     

Конфигурация и тип приложения, загруженного в этот главный процесс, в остальном идентичны. Версии ядра: 2.6.32-5-xen-amd64 для Debian и 3.8.0-19-generic для Ubuntu.

Кто-нибудь знает, почему каждый мастер выделяет себе еще 8 мегабайт памяти?

Обнаружена проблема: системная версия Python 2.7, поставляемая с Ubuntu, заставляет процессы 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