Python uWSGI Django在投票方法上花费太多时间

Python uWSGI Django在投票方法上花费太多时间,python,django,sockets,nginx,uwsgi,Python,Django,Sockets,Nginx,Uwsgi,我在Django项目中使用了Nginx-uWSGI组合,但与Nginx-Apache-modwsgi组合相比,其性能还不够。显然,uwsgi需要大约3-5秒的时间来响应请求,这些请求最多需要300-400毫秒 当我运行评测时,我意识到大部分时间都花在uWSGI处理程序中的response.render函数上。下面是分析结果- 我无法理解为什么methodpoll花费了90%以上的时间,即使服务器上只有一个请求 这是我的uwsgi配置 [uwsgi] uid = www-data gid = w

我在Django项目中使用了Nginx-uWSGI组合,但与Nginx-Apache-modwsgi组合相比,其性能还不够。显然,uwsgi需要大约3-5秒的时间来响应请求,这些请求最多需要300-400毫秒

当我运行评测时,我意识到大部分时间都花在uWSGI处理程序中的
response.render
函数上。下面是分析结果-

我无法理解为什么
methodpoll
花费了90%以上的时间,即使服务器上只有一个请求

这是我的uwsgi配置

[uwsgi]
uid = www-data
gid = www-data
listen = 10000
socket-timeout = 60
socket-send-timeout = 60
socket-write-timeout = 60
set-placeholder = username=sysadmin
set-placeholder = project_directory=/home/sysadmin/builds/deploy_dir/qa_shine
set-placeholder = ruby_shims_path=/home/sysadmin/.rbenv/shims
socket = /run/%n.sock
chmod-socket = 666
chdir = %(project_directory)
pidfile = /run/%n.pid
wsgi-file = deploy/uwsgi.py
master = true
processes = 1
threads = 1
harakiri = 160
virtualenv = /home/%(username)/Envs/candidate/
stats = 127.0.0.1:9191
vacuum = true
die-on-term = true
daemonize = /var/log/uwsgi/%n.log
env = LANG=en_US.UTF-8
auto-procname = true
env = PATH=%(ruby_shims_path):$(PATH)
env = RUBYPATH=%(ruby_shims_path)/ruby
rbrequire = rubygems
location / {
    uwsgi_pass django;
    include uwsgi_params;

    proxy_buffering off;
    proxy_buffers 128 128k;
    proxy_buffer_size 128k;
    proxy_temp_path /run/ 1 2;

    uwsgi_read_timeout       60;
    uwsgi_send_timeout       60;
    uwsgi_connect_timeout    60;
    send_timeout             60;
}

# basic conf
events {
    worker_connections  8192;
    use epoll;
    multi_accept on;
}
我的nginx上游配置

[uwsgi]
uid = www-data
gid = www-data
listen = 10000
socket-timeout = 60
socket-send-timeout = 60
socket-write-timeout = 60
set-placeholder = username=sysadmin
set-placeholder = project_directory=/home/sysadmin/builds/deploy_dir/qa_shine
set-placeholder = ruby_shims_path=/home/sysadmin/.rbenv/shims
socket = /run/%n.sock
chmod-socket = 666
chdir = %(project_directory)
pidfile = /run/%n.pid
wsgi-file = deploy/uwsgi.py
master = true
processes = 1
threads = 1
harakiri = 160
virtualenv = /home/%(username)/Envs/candidate/
stats = 127.0.0.1:9191
vacuum = true
die-on-term = true
daemonize = /var/log/uwsgi/%n.log
env = LANG=en_US.UTF-8
auto-procname = true
env = PATH=%(ruby_shims_path):$(PATH)
env = RUBYPATH=%(ruby_shims_path)/ruby
rbrequire = rubygems
location / {
    uwsgi_pass django;
    include uwsgi_params;

    proxy_buffering off;
    proxy_buffers 128 128k;
    proxy_buffer_size 128k;
    proxy_temp_path /run/ 1 2;

    uwsgi_read_timeout       60;
    uwsgi_send_timeout       60;
    uwsgi_connect_timeout    60;
    send_timeout             60;
}

# basic conf
events {
    worker_connections  8192;
    use epoll;
    multi_accept on;
}

我现在完全迷路了,任何帮助都将不胜感激。

最后我解决了这个问题。显然,问题是我禁用了脱机压缩,但我使用的是
sass
文件,这些文件需要在运行时转换为
css
。结果是这导致了很多IO。当我启用脱机压缩时,响应时间回落到200ms。

最后我解决了这个问题。显然,问题是我禁用了脱机压缩,但我使用的是
sass
文件,这些文件需要在运行时转换为
css
。结果是这导致了很多IO。当我启用脱机压缩时,响应时间回落到200ms。

为什么要为不同的进程调用两次相同的库。还有一点
“如何管理应用程序缓存?”
类似这样的
导入;进口b#但是“a”包括“b”,所以你得到了“(a-b)+2b”
。每次函数调用都有多个延迟。您是否尝试过更改uwsgi进程的数量?通常,即使在一台单核机器上,也至少有2台。您也可以指定让您的uwsgi工作线程生成异步线程,但这取决于您的环境和您希望实现的目标。通常,我使用10个进程和2个线程,但情况保持不变,而与进程数无关。为什么为不同的进程调用两次相同的库。还有一点
“如何管理应用程序缓存?”
类似这样的
导入;进口b#但是“a”包括“b”,所以你得到了“(a-b)+2b”
。每次函数调用都有多个延迟。您是否尝试过更改uwsgi进程的数量?通常,即使在一台单核机器上,也至少有2台。您也可以指定让您的uwsgi工作人员生成异步线程,但这取决于您的环境和您希望实现的目标。通常,我使用10个进程和2个线程,但情况保持不变,而不考虑进程的数量