nginx+uwsgi+python2.7在20000x40000基准测试中遇到瓶颈

0 投票
1 回答
886 浏览
提问于 2025-04-17 03:10

我遇到了一个瓶颈,无论我怎么调整,我的服务器都无法通过一个20000x40000的基准测试。这个服务器有128G内存,配备了一个6核的Xeon处理器,运行的是64位的CentOS 5.6,状态良好。

我尝试了以下几种组合:

nginx + uwsgi + python2.7
nginx + apache + mod_wsgi + python2.7
apache + mod_wsgi + python2.7

但是没有一个组合能通过Apache的基准测试:

ab -c 20000 -n 40000 (without -k)

巧合的是,几乎所有的测试都在32000个请求左右失败了。

关于nginx和uwsgi的详细信息:

nginx:

worker_processes  24
use epoll
worker_connections  65535

uwsgi:

listen 2048
master true
workers 24
uwsgi -x /etc/uwsgi_conf.xml --async 256 --file /var/www/example.py &

有没有人对此有什么想法?非常感谢任何可能的解决方案和建议。

1 个回答

2

在一个系统上允许这么多同时连接,需要对内核进行大量的调整,而且你可能永远无法在实际生产环境中处理这样的负载。

首先,你需要增加临时端口的数量、套接字的等待队列、每个进程允许的文件描述符数量等等……

除此之外(这些调整本身就应该足以阻止这种不切实际的测试),你还应该把uWSGI中的异步核心数量增加到2万。这样做没有问题(每个核心占用的内存不到一页),但你最终会在系统中打开至少4万个套接字。

这适用于nginx+uwsgi。

如果使用Apache,你会得到2万个进程或线程,这比4万个打开的套接字还要糟糕。

撰写回答