我有一个配置了nginx和uwsgi的Django项目。该网站没有太多的cpu处理。大多是简单的读物,但我们希望它能带来很多成功。我已使用apache Benchmark进行负载测试。给出简单的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的结果。在基准测试期间,没有使用太多的内存或处理器。有人可以帮助我有效地设置服务器吗?
据我所知,只有2个核心。您不能仅在两个核心上跨越大量的进程和线程。如果您的线程必须等待其他IO进程,那么您将获得好处。然后他们入睡,其他人可以工作。
总是同时最多两个(=核心数)。
除了您的应用程序“主要是简单易读,但希望获得大量点击量”之外,您没有提供太多有关应用程序的信息。这并不是很多IO等待的声音。我猜数据库也在同一主机上运行(也将需要一些CPU时间)
首先尝试将线程/进程降低到4。然后以+/- 1进行测试,并进行相应的测试。
读取https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html您会发现类似的句子:
没有设置进程或线程数的魔术规则使用。它在很大程度上取决于应用程序和系统。
默认情况下,Python插件不会初始化GIL。这表示您的应用程序生成的线程将无法运行。如果需要线程,请记住使它们具有启用线程。在多线程中运行uWSGI模式(带有线程选项)将自动启用线程支持。这种“奇怪”的默认行为是出于性能原因,不要为此感到羞耻。