一、遇到的一些问题 记得 2008 年做性能测试的时候,新进7台 lenovo 4核4G 服务器用于性能测试。 当时资源紧张,这7台服务器都装了双系统(Win2003/CentOS5)空闲时用于做测试机(压测的Agent)。 当时给Nginx做了一系列测试,印象很深的是:在这批机器上,Nginx状态页面的压测。 短连接的话最佳QPS约4万,长连接的话最高QPS约13万。 大概3年后,那批 lenovo 服务器已经没人瞧得上了,只能做肉鸡。 然而,一次不经意的测试,发现再牛的服务器,短连接最佳QPS也高不了多少。而且,测试机的资源没用完,被测试服务器的资源也用不完,网络也没瓶颈。 服务器资源使用率很低,然而响应就是不够快。 最后,我们发现了瓶颈在监听的入口!是否可以提高监听入口的性能?是否可以端口复用?最后我们找到了SO_REUSEPORT。 SO_REUSEPORT支持多个进程或者线程绑定到同一端口,提高服务器程序的性能。 二、解决方案 测试环境
查看编译参数
Nginx 配置如下: 注意有一个reuse_port参数
压测 reuse_port Tengine 早已支持 reuse_port 。开启 reuse_port 后,你会发现有很多进程同时监听80端口:
加压后你会发现,服务器性能可被你榨干:
对比一下测试 reuse_port 的效果,小伙伴们惊呆了(短连接QPS过了24万)!
真相大白后,你还等什么? 探个究竟 测试过程中由于压大 TCP: Possible SYN flooding on port 80. ,出大量错误 。
于是将并发量降到了6万 net.core.somaxconn = 65535 。
再关闭 reuse_port 后,我们看下 perf top的情况:
然后再打开 reuse_port ,对比 perf top 的情况:
此时再放大 Nginx 监听的 back_log ,看下资源使用情况:
我们来看看些时的队列情况(有入队过万了):
然后我们再来挑战30万并发(MTT是平均响应时间(ms)):
经过一系列调优,相同环境相同并发量,没有再出现 TCP: Possible SYN flooding on port 80.。但出现了少量连接超时的情况:
(责任编辑:IT) |