【问题标题】:uwsgi worker not distributing evenlyuwsgi工作人员分配不均
【发布时间】:2020-06-14 19:38:20
【问题描述】:

我有一个配置了 nginx 和 uwsgi 的 Django 项目。该网站没有太多的cpu处理。主要是简单的阅读,但我们预计会有很多点击。我使用 apache 基准测试进行负载测试。提供一个简单的ab -n 200 -c 200 <url> 会使网站变慢(在基准测试进行时,即使从不同的 IP 地址也无法在任何浏览器中打开网站)。我将进程数设为 16,线程数设为 8。我的 uwsgi.ini 文件如下所示。

[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 时,可以看到工人 7 和 8 正在处理大部分请求,其余的处理的请求数量比他们少。这可能是我在运行基准测试时无法在浏览器中加载网站的原因吗?我如何有效地使用 uwsgi 进程来服务最大数量的并发请求?

这是 htop 的结果。在基准测试期间没有使用太多内存或处理器。有人可以帮我有效地设置服务器吗?

【问题讨论】:

  • 尝试将线程降低到5
  • 关于它如何提供帮助的任何见解?实际上我已经禁用了线程并提高了速度。
  • 你的 NGINX 配置是什么样的?您是否为worker_processes 设置了值?如果未设置,则默认值为 1,这意味着您可能期望 NGINX 使用 uwsgi 进程只使用它自己的一个进程...

标签: python django nginx uwsgi uwsgi-stats-server


【解决方案1】:

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

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

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

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

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

设置进程数或线程数没有神奇的规则 使用。它非常依赖于应用程序和系统。

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

【讨论】:

    【解决方案2】:

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

    这是因为您只有两个核心处理器,当您运行多线程软件时很容易变热。你不能对它做太多的任务。有时它运行得很快,然后停止了一些大型多线程软件。

    【讨论】:

      猜你喜欢
      • 2015-01-02
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多