发现以及分析NGINX -> fastcgi -> ice调用之间存在的性能瓶颈。
- 找出nginx性能极限
- 找出nginx -> fastcgi性能极限。比较同步cgi和异步cgi的差异。
- 找出nginx -> fastcgi -> ice性能极限。比较同步cgi和异步cgi的差异。
10服务器,实体机
8核(Intel(R) Xeon(R) CPUE5504 @ 2.00GHz)
带宽1000Mbit
硬盘7200转
内存32GB
CPU资源差不多用完,所以nginx性能瓶颈在CPU
CPU使用:770(370+400)
达到平均处理数:71.3Ktps
CPU资源差不多用完,所以nginx->cgi异步模型瓶颈也在CPU
CPU资源有剩余,性能瓶颈不在CPU
加大并发数,性能有所提高但和预期不符合。
nginx->cgi同步模型瓶颈是由于nginx upstream模块和cgi之间使用的是短链接,当net.ipv4.tcp_tw_recycle = 0的时候,压测过程中发现time_wait状态的端口达到接近:65536个。由于socket是四元组,所以我们通过增加一个fastcgi监听端口来优化这个模型。
增加一个fastcgi监听端口来压测,从测试结果上看,资源使用开销上去了,但tps并无明显增加。
CPU资源有剩余,性能瓶颈不在CPU
CPU资源有剩余,性能瓶颈不在CPU
NGINX + MUCGI + PROXY异步模型有可优化空间。这个的瓶颈在ice单进程交易率的限制。所以将nginx反代到两个mcgi->两个proxy后。机器性能能完全发挥出来。
CPU使用:788(177+418+193)
达到平均处理数:19.6Ktps
CPU资源差不多用完,所以瓶颈也在CPU.
- 这台服务器上面单独压测nginx能到达到96500tps.
- nginx->fastcgi在资源占用差不多的情况下,
mucgi
每秒处理71300次echo请求,libfcgi
每秒处理21200次echo请求. - nginx->fastcgi->ice_proxy 资源占用差不多的情况下,
mucgi
每秒处理10800次echo请求,libfcgi
每秒处理19600次echo请求.