现象:项目上线前进行压测,发现很小的并发和请求量就会出现僵住,此时cpu和内存利用率都很低。服务器配置为4核8G,压测工具为ab,压测参数1000请求20并发。
解决过程:
1.当服务器使用率都正常时,我首先排除是堆栈异常。如果是堆栈异常会使cpu和内存异常。
2.问题的关键很有可能出现在网络上,先netstat查看一下,发现大量CLOSE_WAIT,果然是网络等待问题。
3.既然是网络等待,那无外乎几种可能,第一种程序有耗时操作,并且设置断开时间很长。第二种程序中有网络链接其他服务,而其他服务处于等待中,比如连接数据库或者调用第三方api等。很不幸,因为配置文件,我的bug就出现在连接redis上。
4.修改redis连接数和最大等待超时时间,问题解决。
5.再次压测,100000请求2000并发,qps稳定在3000+。
最后:
问题很简单,思路很重要,没有方向盲目解决,白白浪费时间。