Я попробовал свои силы с очень маленьким приложением django, которое обслуживает в основном html + статический контент без операций с БД. Приложение находится на nginx и uwsgi. У меня также установлен postgres, но для этой проблемы я не выполнял никаких операций с БД.
Я обнаружил, что процесс uwsgi не освобождает память. На этой диаграмме от newrelic вы обнаружите, что объем памяти, занимаемый процессом uwsgi, остается неизменным на уровне ~100 МБ, хотя во время этого застоя не было абсолютно никакой активности с веб-сайтом/приложением.
Также к вашему сведению: процесс app/uwsgi при запуске потреблял всего 56 МБ. Я достиг этого ~ 100 МБ, когда тестировал с помощью ab (бенчмарк Apache) и нажимал -n 1000 -c 10 или примерно в этом диапазоне.
Конференция Nginx
server
{
listen 80;
server_name <ip_address>;
root /var/www/mywebsite.com/;
access_log /var/www/logs/nginx_access.log;
error_log /var/www/logs/nginx_error.log;
charset utf-8;
default_type application/octet-stream;
tcp_nodelay off;
gzip on;
location /static/
{
alias /var/www/mywebsite.com/static/;
expires 30d;
access_log off;
}
location /
{
include uwsgi_params;
uwsgi_pass unix:/var/www/mywebsite.com/django.sock;
}
}
app_uwsgi.ini
[uwsgi]
plugins = python
; define variables to use in this script
project = myapp
base_dir = /var/www/mywebsite.com
app=reloc
uid = www-data
gid = www-data
; process name for easy identification in top
procname = %(project)
no-orphans = true
vacuum = true
master = true
harakiri = 30
processes = 2
processes = 2
pythonpath = %(base_dir)/
pythonpath = %(base_dir)/src
pythonpath = %(base_dir)/src/%(project)
logto = /var/www/logs/uwsgi.log
chdir = %(base_dir)/src/%(project)
module = reloc.wsgi:application
socket = /var/www/mywebsite.com/django.sock
chmod-socket = 666
chown-socket = www-data
Обновление 1: похоже, это не uwsgi, а процессы python, которые сохраняют определенные структуры данных для более быстрой обработки.