Мы используем mongodb в нашем приложении. Наш процесс python (приложение django) считывает данные из mongodb и на основании некоторых вычислений отправляет HttpResponse. Теперь проблема в том, что данные, прочитанные из mongodb, довольно велики. Каждый размер запроса составляет около 900 МБ (в некоторых случаях - 1 ГБ). Наш процесс python выходит из памяти и выдает MemoryError, из-за которого рабочий процесс uWSGI умирает и снова появляется.Django, nginx и uWSGI: рабочие uWSGI продолжают умирать и перезагружать
Мой uwsgi.conf:
[uwsgi]
chdir=/var/www/MERU/Meru/deviceapp/meru_device/
pythonpath=/var/www/MERU/Meru/deviceapp/meru_device/
env=DJANGO_SETTINGS_MODULE=meru_device.settings
module=meru_device.wsgi:application
uid=www-data
gid=www-data
socket=/tmp/da.sock
daemonize=/tmp/da.log
processes=2
master=true
listen=512
harakiri=80
memory-report=true
limit-as=1024
reload-on-as=1024
reload-on-rss=512
pidfile=/tmp/da.pid
chmod-socket=666
vacuum=true
max-requests=5000
Мой uwsgi_params файл:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
Мой nginx.conf:
upstream django {
server unix:///tmp/da.sock;
}
server {
listen 8000;
server_name <my-elastic-ip>;
charset utf-8;
# max upload size
client_max_body_size 75M;
location /meru-nms {
uwsgi_pass django;
include /var/www/MERU/Meru/deviceapp/meru_device/uwsgi_params; # the uwsgi_params file you installed
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, OPTIONS';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Max-Age' 1728000;
}
}
нам необходимо увеличить объем памяти для процесса питона ли ? Или нам нужно увеличить ограничение адресного пространства для uwsgi? Может кто-то указать нам в правильном направлении?
Я бы рекомендовал найти решение, которое не включает размеры запросов 1 ГБ, вместо того, чтобы пытаться разобраться с симптомами запроса 1 ГБ. –
согласен с Скоттом, вы уже нашли проблему самостоятельно (вы произвольно ограничили адресное пространство ваших процессов), с запросами с таким воздействием - плохая идея. – roberto
@roberto: У меня по-прежнему возникает такая же проблема. Если я удалю адрес ограничение пространства в процессе uWSGI. – dotslash