记录一次针对jmeter压力测试事件
事件起因:通过云平台虚拟机压测非常快,大概不到1分钟就会出现错误
HTTP请求,Non HTTP response code: java.net.NoRouteToHostException,Non HTTP response message: 无法指定被请求的地址 (Address not available)
解决方向:度娘了解到这个错误是说客户端连接所使用的端口数量不足,因此我进行实时监控发现服务器TCP请求达到将近3W就会达到顶峰
并且同一时间,压测工具对应的服务开始出现error大于0的错误百分比,至此可以确认端口目前只能搞到30000,通过一顿排查和资料阅读了解到文件描述符数量和可用端口数量的差异性,实际可用端口也就30000来的 ,每个云平台服务器不是特别一样,这个自行可以查阅,参考(https://blog.csdn.net/zhaominpro/article/details/88954913)
于是乎开始修改连接数,
net.ipv4.ip_local_port_range="15000 64000"
但是修改了/etc/sysctl.conf 并且sysctl -p 并没有发现生效,各种尝试然并卵,端口可用无法达到5W,此处一直卡住。继续换一个思路,为什么端口不能及时有效的回收呢,首先了解到 net.core.somaxconn
修改somaxconn
该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大,具体干嘛的自行百度
其次 net.ipv4.tcp_max_tw_buckets
修改成了5000 如果你内存够大 可以调大点
再次 net.ipv4.tcp_max_syn_backlog
tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限; somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。 对于没有调优的新装的centOS6.5系统,这两个参数的值都是128。
调整完毕后再次压测,没有问题了 最起码端口够用了