为了账号安全,请及时绑定邮箱和手机立即绑定

uwsgi worker 分布不均匀

uwsgi worker 分布不均匀

天涯尽头无女友 2022-08-16 10:47:20
我有一个Django项目,用nginx和uwsgi配置。网站中涉及的CPU处理并不多。大部分都是简单的阅读,但我们预计会有很多点击。我使用apache基准测试。给出一个简单的方法是使网站变慢(当基准测试正在进行时,即使从不同的IP地址也无法在任何浏览器中打开网站)。我给出了16个进程的数量和8个线程的数量。我的uwsgi.ini文件如下。ab -n 200 -c 200 <url>[uwsgi] master          = true  socket          = /tmp/uwsgi.sock chmod-socket    = 666 chdir           = <directory> wsgi-file       = <wsgi file path> processes       = 16 threads         = 8 virtualenv      = <virtualenv path> vacuum          = true enable-threads  = true daemonize= <log path> stats= /tmp/stats.sock当我检查uwsgitop时,可以看到worker 7和8正在处理大多数请求,其余的处理的请求数量少于它们。这可能是我在运行基准测试时无法在浏览器中加载网站的原因吗?如何有效地使用uwsgi进程来提供最大数量的并发请求?这是htop的结果。在基准测试期间,使用的内存或处理器不多。有人可以帮我有效地设置服务器吗?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

据我所知,只有2个核心。您不能仅跨越两个内核的大量进程和线程。如果您的线程必须等待其他 IO 进程,您将获得优势。然后他们去睡觉,其他人可以工作。

始终最多两个(=内核数)同时使用。

你没有提供有关你的应用的太多信息,除了它“主要是简单的阅读,但我们预计会有很多点击”。这不是很多IO等待的声音。我猜数据库也在同一台主机上运行(也需要一些CPU时间)

首先尝试将线程/进程降低到 4。然后玩+/- 1并相应地进行测试。

阅读 https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html 你会发现这样的句子:

没有用于设置要使用的进程或线程数的魔术规则。它在很大程度上取决于应用程序和系统。

默认情况下,Python 插件不会初始化 GIL。这意味着应用生成的线程将不会运行。如果需要线程,请记住使用启用线程启用它们。在多线程模式下运行 uWSGI(使用线程选项)将自动启用线程支持。这种“奇怪”的默认行为是出于性能原因,这并不丢人。


查看完整回答
反对 回复 2022-08-16
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

如果您有足够的钱,请根据您的主板要求更换处理器。最好选择核心i3或更高版本。

这是因为您只有两个核心处理器,当您运行多线程软件时,很容易被加热。你不能在上面做很多任务。有时它运行得如此之快,然后停止了一些大型多线程软件。


查看完整回答
反对 回复 2022-08-16
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信