为了验证系统性能,分别通过jmeter基于http、https 以及httpclient HttpUrlConnection 等几种方式对及支持http /https 接口进行1000thread并发测试结果分析,执行脚本过程中分别出现如下错误信息及解决过程记录。
1、NoHttpResponseException (the target server failed to respond) 服务端无异常
原因:
由于服务器端的负载过高以及网络带宽占满等因素导致响应延迟加长,而Jmeter默认没有timout等待,导致出错。
解决办法:
设置bin/jmeter.properties:
# Number of retries to attempt (default 0)
httpclient4.retrycount=3
# Idle connection timeout (ms) to apply if the server does not send Keep-Alive headers
httpclient4.idletimeout=30
2、不能指定有效地址
原因:服务端应用正常,分别查看发压机与服务器的可用端口范围,发压机器端口不够用
解决方法:
1). netstat|grep TIME_WAIT |wc -l 查看目前处在TIME_WAIT状态的值大不大
2). 检查系统sysctl中配置项:(/etc/sysctl.conf)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_tw_buckets = 10000 (5000也OK,主要是前两个值)
3). 如果上面三个值都正常,cat /proc/sys/net/ipv4/ip_local_port_range 查看可使用的端口范围。如果是默认范围,可修改为:net.ipv4.ip_local_port_range = 1024 65535
4). 执行:sysctl -p ,使设置立即生效。
3、通过提交httpclient实现java请求时,出现 too many open files 错,而服务端的句柄数已经调整过
原因:测试脚本没有关闭链接导致(应该使用链接池实现)
解决方法:
1、调整发压端打开最大句柄数
https://blog.csdn.net/zzq900503/article/details/54881848
2、finally块中增加 主动关闭链接httpClient.getConnectionManager().closeIdleConnections(0, TimeUnit.SECONDS);
参考:https://lzhw1985.iteye.com/blog/1946545
性能测试之压力机瓶颈分析及优化参考如下
https://www.cnblogs.com/xianrou/p/6328048.html