4

我有一个配置了 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 的结果。在基准测试期间没有使用太多内存或处理器。有人可以帮我有效地设置服务器吗?

4

2 回答 2

0

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

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

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

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

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

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

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

于 2020-03-12T07:38:26.533 回答
0

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

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

于 2020-03-12T07:48:07.307 回答