0
我們在我們的應用程序中使用了mongodb。 我們的python進程(django應用程序)從mongodb讀取數據,並根據一些計算結果發送HttpResponse。 現在的問題是,從mongodb中讀取的數據非常大。 每個查詢大小都將近900MB(某些情況下爲1 Gb)。 我們的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的地址空間限制? 有人可以指出我們在正確的方向嗎?
我建議找到一個不涉及1GB查詢大小而不是試圖處理1GB查詢症狀的解決方案。 –
贊同Scott,你已經自己發現了問題(你自願限制你的進程的地址空間),請求這樣的影響是一個壞主意 – roberto
@roberto:我仍然面臨同樣的問題,如果我刪除地址uWSGI過程的空間限制。 – dotslash