2014-03-27 16 views
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的地址空間限制? 有人可以指出我們在正確的方向嗎?

+0

我建議找到一個不涉及1GB查詢大小而不是試圖處理1GB查詢症狀的解決方案。 –

+0

贊同Scott,你已經自己發現了問題(你自願限制你的進程的地址空間),請求這樣的影響是一個壞主意 – roberto

+0

@roberto:我仍然面臨同樣的問題,如果我刪除地址uWSGI過程的空間限制。 – dotslash

回答

1

我建議你爲你的應用程序設置內存分析 - 你可以編寫簡單的中間件來運行你的視圖和分析器。作爲分析器,您可以使用memory_profiler