uwsgi worker 分布不均匀

我有一个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

http://img1.mukewang.com/62fb05800001b16d06570166.jpg

当我检查uwsgitop时,可以看到worker 7和8正在处理大多数请求,其余的处理的请求数量少于它们。这可能是我在运行基准测试时无法在浏览器中加载网站的原因吗?如何有效地使用uwsgi进程来提供最大数量的并发请求?

http://img.mukewang.com/62fb05900001c5aa06590113.jpg

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


天涯尽头无女友
浏览 243回答 2
2回答

泛舟湖上清波郎朗

据我所知,只有2个核心。您不能仅跨越两个内核的大量进程和线程。如果您的线程必须等待其他 IO 进程,您将获得优势。然后他们去睡觉,其他人可以工作。始终最多两个(=内核数)同时使用。你没有提供有关你的应用的太多信息,除了它“主要是简单的阅读,但我们预计会有很多点击”。这不是很多IO等待的声音。我猜数据库也在同一台主机上运行(也需要一些CPU时间)首先尝试将线程/进程降低到 4。然后玩+/- 1并相应地进行测试。阅读&nbsp;https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html&nbsp;你会发现这样的句子:没有用于设置要使用的进程或线程数的魔术规则。它在很大程度上取决于应用程序和系统。默认情况下,Python 插件不会初始化 GIL。这意味着应用生成的线程将不会运行。如果需要线程,请记住使用启用线程启用它们。在多线程模式下运行 uWSGI(使用线程选项)将自动启用线程支持。这种“奇怪”的默认行为是出于性能原因,这并不丢人。

素胚勾勒不出你

如果您有足够的钱,请根据您的主板要求更换处理器。最好选择核心i3或更高版本。这是因为您只有两个核心处理器,当您运行多线程软件时,很容易被加热。你不能在上面做很多任务。有时它运行得如此之快,然后停止了一些大型多线程软件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python