我遇到了一个瓶颈,无论我做什么调整,我的服务器都无法通过20000x40000基准测试。服务器有128G内存和Xeon 6核心cpu, centos5.6-64bit,状态良好。
i尝试组合包括:
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 &
有人知道吗?提前感谢任何可能的解决方案和建议
在单个系统上允许如此数量的并发连接需要大量的内核调优,并且您可能永远无法在生产中管理这样的负载。
首先,你必须增加临时端口的数量,套接字积压队列,每个进程允许的文件描述符的数量等等…
除此之外(这应该已经足以阻止这种不切实际的测试),你应该增加uWSGI中的异步核心数量到20k。这没有什么问题(每个核心消耗的内存少于一页),但是您将在系统中至少打开40k的套接字。
这是为nginx+uwsgi。
使用Apache,您将以20k进程或线程结束,这甚至比40k打开的套接字更糟糕。