2013-05-02 137 views
4

我試着用一個非常小的django應用程序,主要用於無靜態數據庫操作的html +靜態內容。該應用程序在nginx和uwsgi上。我也安裝了postgres,但對於這個問題,我沒有做任何數據庫操作。uWSGI不釋放內存

我發現內存沒有被uwsgi進程釋放。在這張來自newrelic的圖表中,您會發現uwsgi進程佔用的內存在〜100MB時仍然停滯不前,儘管在停滯期間網站/應用程序絕對沒有任何活動。

此外僅供參考:app/uwsgi進程開始時只消耗56MB。當我使用ab(apache基準測試)進行測試時,我達到了這個〜100MB,並且在-n 1000 -c 10或其附近進行了測試。

enter image description here

的Nginx的conf

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,但保留一定的速度更快的數據結構蟒蛇過程處理。

回答

1

Web框架將代碼加載到內存中是很常見的。這通常不是一個問題,但對工人的總內存消耗設置上限並不是一個壞主意,因爲在多次請求過程中,單個工人的內存消耗可能會增加。

當員工達到或超過上限時,一旦請求被提供,它將自動重新啓動。這是通過reload_on_rss flag

您想要設置它取決於您的服務器上可用的內存和您正在運行的工人的數量。

0

您可能還會在.ini文件中限制每個工作人員使用max-requests選項的最大請求數。這將殺死已經處理了指定數量的max-requests的工人併產生新的工人。