uWSGI服务器使用的标准工作进程和线程数是多少?

6
我有一个Nginx Web服务器,安装了uWSGI应用程序服务器在单个CPU的Ubuntu 14.04映像上。
这个uWSGI应用程序服务器成功地处理了Flask应用程序请求。我面临的问题是,有时来自单个客户端的请求会超时,时间很长(1-2小时)。
在我的uwsgi.conf文件中没有指定工作进程或线程时,就会发生这种情况。每个CPU使用的理想工作进程/线程数量是多少?
我正在使用皇帝服务启动uWSGI应用程序服务器。这是我的uwsgi.conf的样子。
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn

env UWSGI=/var/www/parachute_server/venv/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log

exec $UWSGI --master --workers 2 --threads 2 --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO --stats 127.0.0.1:9191

这可能是与nginx/uwsgi相关的性能问题,或者更有可能是因为我仅使用了一个CPU而导致超时。

任何帮助都非常感激!

1个回答

7

你提出了一个有趣的问题...

通常情况下,你需要至少指定2 * #CPUs + 1个工作进程。这是因为uWSGI可能正在执行套接字的读/写操作,并且你还需要另外一个工作进程来接受请求。此外,如果你的工作进程是同步的,threads标志也很有用,因为它们可以通知主线程它们仍在忙于工作,并防止超时。

我认为只使用一个工作进程是导致超时的原因(阻塞了其他所有请求),但你应该审查一下应用程序的响应。如果它们需要很长时间才能完成(比如从数据库中读取数据),那么你需要调整Nginx中的uwsgi_read_timeout指令以允许uWSGI处理请求。

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接