После переноса наших веб-серверов с 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