【发布时间】:2016-05-07 01:29:16
【问题描述】:
早上好,
我是网络服务器基础架构和管理的新手。我尝试使用 nginx + uwsgi + django 和 python 安装的网络服务器存在以下问题:每次刷新或请求用户正在执行的网页时,uwsgi 都会创建 2-3 个永不终止的新线程。几天后,我的线程数超过了 30000,我不得不重新加载 uwsgi 以保持网页的性能。
要检查线程数,我使用以下命令: ps - eLf | grep uwsgi(你可以看到附件的结果)。
我的uwsgi配置如下:
[uwsgi]
vhost = true
socket = /tmp/mySocket.sock
master = true
processes = 4
max_request = 300
vacuum = true
die-on-term = true
close-on-exec = true
harakiri = 30
wsgi-file = /home/virtualEnv/server/wsgi.py
virtualenv = /home/virtualEnv
pythonpath = /home/virtualEnv/myServer
chdir=/home/virtualEnv/myServer
pidfile=/tmp/myFile.pid
daemonize = /var/log/uwsgi/uwsgi-@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
chmod-socket = 664
gid = www-data
uid = www-data
我的 uwsgi.py 文件如下:
import os
import sys
path = ‘/home/virtualEnv/myServer'
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myServer.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
而我的 /etc/init/uwsgi.conf 文件是:
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec uwsgi --emperor /etc/uwsgi/vassals/ --wsgi-file /home/virtualEnv/server/wsgi.py
我尝试过使用带和不带线程的 uwsgi,带和不带 --thunder-lock 但没有真正改变。
编辑:
清理 uwsgi.ini 文件后,我仍然遇到同样的问题。文件的当前配置是:
uwsgi.ini:
[uwsgi]
socket = /tmp/mySocket.sock
master = true
processes = 4
max_request = 3
vacuum = true
die-on-term = true
close-on-exec = true
harakiri = 30
wsgi-file = /home/virtualEnv/server/wsgi.py
virtualenv = /home/virtualEnv
pythonpath = /home/virtualEnv/myServer
chdir=/home/virtualEnv/myServer
pidfile=/tmp/myFile.pid
logger = file:/var/log/uwsgi/uwsgi-@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
chmod-socket = 664
gid = www-data
uid = www-data
uwsgi.conf
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec uwsgi --emperor /etc/uwsgi/vassals/
nginx.conf:
user www-data;
worker_processes auto;
worker_rlimit_nofile 10000;
pid /run/nginx.pid;
events {
worker_connections 10000;
multi_accept on;
use epoll;
}
http {
server_tokens off;
resolver 8.8.8.8;
map $http_accept_language $lang {
default en;
~*en en;
~*pt pt;
~*fr fr;
~*it it;
~*es es;
~*ru ru;
~*ro ro;}
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 10m;
large_client_header_buffers 2 1k;
client_body_timeout 12;
client_header_timeout 12;
keepalive_requests 100;
send_timeout 10;
open_file_cache max=2500 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
sendfile off;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 5000;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
charset UTF-8;
gzip on;
gzip_http_version 1.0;
gzip_vary on;
gzip_static on;
gzip_disable ""msie6"";
gzip_min_length 256;
gzip_comp_level 1;
gzip_buffers 4 32k;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}"
【问题讨论】:
-
我也遇到了同样的问题,请问您找到解决方法了吗?
-
除了在必要时优雅地重新加载工作人员之外,我还没有找到解决方案。
标签: python django multithreading nginx uwsgi