JMeter报错信息处理
1. java.net.BindException: Address already in use: connect

开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本
分布式环境部署参考:r
https://www.cnblogs.com/whitewasher/p/6946207.html
但是依然还是会报错,后面查阅了相关资料后发现,是因为windows本身提供的端口访问机制的问题。
Windows XP提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。
解决方案为:
1.cmd中,用regedit命令打开注册表
2.在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下,
1 .右击parameters,添加一个新的DWORD,名字为MaxUserPort
2 .然后双击MaxUserPort,输入数值数据为65534,基数选择十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
3.修改配置完毕之后记得重启机器才会生效
2. 在Windows机器上用Jmeter做性能测试,汇总下我自身遇到的错误和解决方案

java.net.BindException: Address already in use: JVM_Bind
原因分析:压测服务器问题,由于并发太高,导致自身port不够用,需要调整机器的端口,可用netstat -ano看出来;去掉下面的/c查看详细端口占用
定位:
cmd中,用regedit命令打开注册表;在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下, 1)右击parameters,添加一个新的DWORD/QWORD,名字为MaxUserPort 2)然后双击MaxUserPort,输入数值数据为65534,基数选择十进制,重启电脑生效
Nginx: 99: Cannot assign requested address for upstream
如下链接解决方案:
http://blog.51cto.com/12223582/1877316


3. JMeter测试问题:address already in use
在Windows Server 2003执行JMeter,当并发线程数较高时(尤其是测试机器还存在连接其他服务器的socket),可能会产生address already in use的异常。
搜索一番,很多文章指出是Windows的bug。通过在测试机器添加注册表项MaxUserPort、TcpTimedWaitDelay,并设置恰当值可解决该错误(当没有这两个注册表项时);或者修改为合适的值(如果已经存在这两个注册表项)。
方法:
在运行JMeter agent的机器上上添加注册表条目MaxUserPort和TcpTimedWaitDelay,分别设置值为65534、30,以增大可分配的tcp连接端口数、减小处于TIME_WAIT状态的连接的生存时间。
该方法确认对Windows Server也有效,因为在Windows Server 2003 R2上发现缺失MaxUserPort和TcpTimedWaitDelay。具体设置见下面的连接。
解决方法:
最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的错误,翻了一下帖子发现是system.properties中配置有些问题,特此记录一下,没有时间细分析,先上解决方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可;
https://blog.csdn.net/dilai0918/article/details/101588077
5.java.net.SocketException: Socket closed问题
解决方法: 将每条HTTP Request 添加以下配置
在Advanced中配置 implementation 选择HttpClient4,Connect 选择连接保持时间 单位为毫秒
6. java.net.SocketException/Non HTTP response message: Connection reset
user.properties:
7. Jmeter压测报错:Non HTTP response code: java.net.ConnectExceptionexception的解决办法
前一段时间进行jmeter压测时,一直报错,查看了下日志才发现报了一堆Non HTTP response code: java.net.ConnectExceptionexception,直接jmeter就没发送到服务端

本想加个Constant Throughput Timer去进行控制qps从而避免错误率,可是那样qps就不是服务器的最大压力值了。
想了好几种方法,也将jmeter.properties中的httpclienc.timeout调大去尝试,还是有这个错误

最后试了一下将client implementation配置成java,结果奇迹出现了,发送不出去的错误被避免了,qps的量也上来了


总结:有加解密的情况下,默认的HTTPClinet在POST时会自动将特殊字符转义,然而Java在发送过程中却未处理;
jmeter发送http请求时,implementation会有以下几种选项

JAVA:使用的是JAVA JVM提供的http方法,但有一定的限制,
1、当jmeter释放一个请求后,同样的进程中可能不会再使用了;
2、只使用于单进程模式;
3、不支持虚拟主机,不支持相关的方法,不支持存储证书的请求
HttpClient4.1:使用的是Apache HttpClient4.1部件
空白:使用Http默认请求中配置或jmeter.properties中jmeter.httpsample中的配置
8. Jmeter之Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect
最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的错误,翻了一下帖子发现是system.properties中配置有些问题,特此记录一下,没有时间细分析,先上解决方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可;
需要了解原因的可以参考该贴:
https://blog.csdn.net/hualusiyu/article/details/53490183
9. Connection reset
Apache JMeter对启用SSL的应用程序执行性能和/或负载测试时,SSL套接字错误可能是经常遇到的麻烦,严重阻碍了您的测试工作。本文重点介绍如何通过相应地配置和调优JMeter来克服这些与连接相关的错误。
在Jmeter中指示SSL套接字问题的错误消息示例包括:
强烈建议使用最新版本,以利用新的改进和组件。
避免在最后一个版本之前使用早于3个版本的版本。
建议#2:在JMeter中启用DEBUG模式
将以下内容添加到jmeter.properties以启用JMeter Logger面板:
Options -> Log Level -> DEBUG
要通过log4j2.xml启用上下文和线路日志记录的调试模式: name="org.apache.http" level="debug" />
建议#3:设置连接超时
JMeter中的默认连接超时是开箱即用的20秒。为帮助诊断和解决套接字连接问题,增加此值通常很有帮助。为此,请在JMeter测试计划中为HTTP Request对象指定更高的连接超时。例如,设置为60000(毫秒)以将总超时增加到60秒。
从“配置元素”选项中添加“HTTP请求默认”配置元素(即,右键单击测试计划并添加此“HTTP请求默认值”)。

在“HTTP请求默认值”中,有一个选项 - 连接'超时(毫秒)'在此字段中指定您的连接超时值,它将应用于所有子采样器。如果在测试计划级别添加了“HTTP请求默认值”,则它将应用于所有采样器和所有线程组。

要指定单独的连接超时,请在每个采样器的相同字段中指定。单个采样器连接超时将覆盖“HTTP请求默认”连接超时值。

建议#4:延迟线程创建
JMeter可以选择延迟线程创建,直到线程开始采样(即,在任何线程组延迟和线程本身的加速时间之后)。这允许非常大的线程总数,前提是不会有太多并发的线程。

建议5:禁用并行下载
JMeter使用更多资源来模拟浏览器并行获取嵌入资源,如css,gif,js和静态内容。如果有许多用户,则可能会创建太多线程,并且由于JMeter端的带宽争用而开始对响应时间产生负面影响。如果要模拟许多用户,建议禁用并行下载,因为JMeter不会模拟浏览器的缓存,浏览器也不会在后续请求中重新下载嵌入式资源。

建议#6:配置受信任和客户端SSL证书
如果您的应用程序服务器层上有内部签名或自签名证书,则需要将JMeter配置为将这些证书识别为有效。要解决此问题,请修改system.properties并使用相关的签名者证书配置信任库。
在jmeter.properties中设置下面的属性,以调整JMeter处理SSL会话,协议和密码的方式:
要启用SSL会话共享:
为避免HTTP连接池出现问题,可能需要在JMeter中启用陈旧连接检查。在JMeter测试运行期间接收“Socket Closed”异常时,应使用此步骤。要启用过时连接检查,请在user.properties中设置以下属性:
Keep-Alive是HTTP协议的一个非常重要的特性。它允许客户端通过单个TCP连接发出多个HTTP请求。这提供了很大的性能提升,因为否则建立许多TCP连接将产生大量不必要的网络开销。
建议#10:检查负载均衡器配置
如果负载测试遇到负载均衡器前端的应用程序,请确保负载均衡器配置了足够的最大连接限制以处理预期负载。同样,验证负载平衡算法不会将过多的流量偏向一个或多个应用程序服务器实例,并且该负载充分分散在应用程序服务器后端之间。
10 .高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案
(1)问题产生:使用500个线程并发下载tomcat工程中的一个文件时,服务器出现java.net.SocketException: Connection reset异常,
客户端出现connect timeout;
(2)分析认为是服务器连接超过最大并发数而重置,导致客户端连接超时;
于是配置tomcat的配置文件,修改最大并发连接数:
在/home/econf/apache-tomcat-6.0.20/conf目录下,修改server.xml 在 标签内添加 maxThreads="500" minSpareThreads="50" maxSpareThreads="100" enableLookups="false" acceptCount="500"
之后重启tomcat
此问题解决
11. Jmeter 遇到的问题:rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response mess
在使用Jmeter压测时,遇到日志中有大量的错误:
rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response message: Cannot assign requested address" 如下图:
原因:Jmeter 发压机的端口不够用
解决办法: 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 ,使设置立即生效。


开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本
分布式环境部署参考:r
https://www.cnblogs.com/whitewasher/p/6946207.html
但是依然还是会报错,后面查阅了相关资料后发现,是因为windows本身提供的端口访问机制的问题。
Windows XP提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。
解决方案为:
1.cmd中,用regedit命令打开注册表
2.在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下,
1 .右击parameters,添加一个新的DWORD,名字为MaxUserPort
2 .然后双击MaxUserPort,输入数值数据为65534,基数选择十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
3.修改配置完毕之后记得重启机器才会生效
2. 在Windows机器上用Jmeter做性能测试,汇总下我自身遇到的错误和解决方案

java.net.BindException: Address already in use: JVM_Bind
原因分析:压测服务器问题,由于并发太高,导致自身port不够用,需要调整机器的端口,可用netstat -ano看出来;去掉下面的/c查看详细端口占用
定位:
netstat -ano | find "10.215.70.172:443" | find "ESTABLISHED" /c
50
netstat -ano | find "10.215.70.172:443" | find "SYN" /c
netstat -ano | find "10.215.70.172:443" | find "TIME_WAIT" /c
2233
解决方案:50
netstat -ano | find "10.215.70.172:443" | find "SYN" /c
netstat -ano | find "10.215.70.172:443" | find "TIME_WAIT" /c
2233
cmd中,用regedit命令打开注册表;在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下, 1)右击parameters,添加一个新的DWORD/QWORD,名字为MaxUserPort 2)然后双击MaxUserPort,输入数值数据为65534,基数选择十进制,重启电脑生效
Nginx: 99: Cannot assign requested address for upstream
如下链接解决方案:
http://blog.51cto.com/12223582/1877316


3. JMeter测试问题:address already in use
在Windows Server 2003执行JMeter,当并发线程数较高时(尤其是测试机器还存在连接其他服务器的socket),可能会产生address already in use的异常。
搜索一番,很多文章指出是Windows的bug。通过在测试机器添加注册表项MaxUserPort、TcpTimedWaitDelay,并设置恰当值可解决该错误(当没有这两个注册表项时);或者修改为合适的值(如果已经存在这两个注册表项)。
方法:
在运行JMeter agent的机器上上添加注册表条目MaxUserPort和TcpTimedWaitDelay,分别设置值为65534、30,以增大可分配的tcp连接端口数、减小处于TIME_WAIT状态的连接的生存时间。
该方法确认对Windows Server也有效,因为在Windows Server 2003 R2上发现缺失MaxUserPort和TcpTimedWaitDelay。具体设置见下面的连接。
解决方法:
- 打开注册表:ctrl+r 输入regedit
- 进入注册表,路径为:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
- 新建DWORD值,(十进制)设置为30秒。名称:TcpTimedWaitDe,值:30
- 新建DWORD值,(十进制)最大连接数65534。名称:MaxUserPort,值:65534
最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的错误,翻了一下帖子发现是system.properties中配置有些问题,特此记录一下,没有时间细分析,先上解决方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可;
https://blog.csdn.net/dilai0918/article/details/101588077
5.java.net.SocketException: Socket closed问题
解决方法: 将每条HTTP Request 添加以下配置

6. java.net.SocketException/Non HTTP response message: Connection reset
user.properties:
httpclient4.retrycount=1
hc.parameters.file=hc.parameters
hc.parameters:
hc.parameters.file=hc.parameters
http.connection.stalecheck$Boolean=true
7. Jmeter压测报错:Non HTTP response code: java.net.ConnectExceptionexception的解决办法
前一段时间进行jmeter压测时,一直报错,查看了下日志才发现报了一堆Non HTTP response code: java.net.ConnectExceptionexception,直接jmeter就没发送到服务端

本想加个Constant Throughput Timer去进行控制qps从而避免错误率,可是那样qps就不是服务器的最大压力值了。
想了好几种方法,也将jmeter.properties中的httpclienc.timeout调大去尝试,还是有这个错误

最后试了一下将client implementation配置成java,结果奇迹出现了,发送不出去的错误被避免了,qps的量也上来了


总结:有加解密的情况下,默认的HTTPClinet在POST时会自动将特殊字符转义,然而Java在发送过程中却未处理;
jmeter发送http请求时,implementation会有以下几种选项

JAVA:使用的是JAVA JVM提供的http方法,但有一定的限制,
1、当jmeter释放一个请求后,同样的进程中可能不会再使用了;
2、只使用于单进程模式;
3、不支持虚拟主机,不支持相关的方法,不支持存储证书的请求
HttpClient4.1:使用的是Apache HttpClient4.1部件
空白:使用Http默认请求中配置或jmeter.properties中jmeter.httpsample中的配置
8. Jmeter之Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect
最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect的错误,翻了一下帖子发现是system.properties中配置有些问题,特此记录一下,没有时间细分析,先上解决方法:
修改%JMETER_HOME%/bin/system.properties文件中的java.net.preferIPv4Stack=true即可;
需要了解原因的可以参考该贴:
https://blog.csdn.net/hualusiyu/article/details/53490183
9. Connection reset
Apache JMeter对启用SSL的应用程序执行性能和/或负载测试时,SSL套接字错误可能是经常遇到的麻烦,严重阻碍了您的测试工作。本文重点介绍如何通过相应地配置和调优JMeter来克服这些与连接相关的错误。
在Jmeter中指示SSL套接字问题的错误消息示例包括:
Non HTTP response code: java.net.SocketException Non HTTP response message: Connection reset`
`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: connect timed out`
`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: Read timed out
建议#1:使用最新版本的JMeter`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: connect timed out`
`Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: Read timed out
强烈建议使用最新版本,以利用新的改进和组件。
避免在最后一个版本之前使用早于3个版本的版本。
建议#2:在JMeter中启用DEBUG模式
将以下内容添加到jmeter.properties以启用JMeter Logger面板:
jmeter.loggerpanel.display=true
要通过JMeter菜单将日志级别增加到DEBUG:Options -> Log Level -> DEBUG

要通过log4j2.xml启用上下文和线路日志记录的调试模式:
JMeter中的默认连接超时是开箱即用的20秒。为帮助诊断和解决套接字连接问题,增加此值通常很有帮助。为此,请在JMeter测试计划中为HTTP Request对象指定更高的连接超时。例如,设置为60000(毫秒)以将总超时增加到60秒。
从“配置元素”选项中添加“HTTP请求默认”配置元素(即,右键单击测试计划并添加此“HTTP请求默认值”)。

在“HTTP请求默认值”中,有一个选项 - 连接'超时(毫秒)'在此字段中指定您的连接超时值,它将应用于所有子采样器。如果在测试计划级别添加了“HTTP请求默认值”,则它将应用于所有采样器和所有线程组。

要指定单独的连接超时,请在每个采样器的相同字段中指定。单个采样器连接超时将覆盖“HTTP请求默认”连接超时值。

建议#4:延迟线程创建
JMeter可以选择延迟线程创建,直到线程开始采样(即,在任何线程组延迟和线程本身的加速时间之后)。这允许非常大的线程总数,前提是不会有太多并发的线程。

建议5:禁用并行下载
JMeter使用更多资源来模拟浏览器并行获取嵌入资源,如css,gif,js和静态内容。如果有许多用户,则可能会创建太多线程,并且由于JMeter端的带宽争用而开始对响应时间产生负面影响。如果要模拟许多用户,建议禁用并行下载,因为JMeter不会模拟浏览器的缓存,浏览器也不会在后续请求中重新下载嵌入式资源。

建议#6:配置受信任和客户端SSL证书
如果您的应用程序服务器层上有内部签名或自签名证书,则需要将JMeter配置为将这些证书识别为有效。要解决此问题,请修改system.properties并使用相关的签名者证书配置信任库。
# Truststore properties (trusted certificates)javax.net.ssl.trustStore=C:/trust.jksjavax.net.ssl.trustStorePassword=sample
如果您的应用程序需要SSL客户端证书身份验证或授权,则需要创建密钥库并在指向该密钥库的system.properties文件中设置以下属性:
# Keystore properties (client certificates)javax.net.ssl.keyStore=C:/key.jksjavax.net.ssl.keyStorePassword=sample
建议7:调整JMeter SSL配置在jmeter.properties中设置下面的属性,以调整JMeter处理SSL会话,协议和密码的方式:
要启用SSL会话共享:
https.sessioncontext.shared=true
设置默认HTTPS协议级别:
https.default.protocol=TLSv1.2
要启用多个HTTPS协议:
https.socket.protocols=TLSv1 TLSv1.2
要启用多个密码:
https.cipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256
要在测试期间保留SSL上下文:
https.use.cached.ssl.context=true
在http 4上设置重试次数
httpclient4.retrycount=1
建议#8:启用陈旧连接检查为避免HTTP连接池出现问题,可能需要在JMeter中启用陈旧连接检查。在JMeter测试运行期间接收“Socket Closed”异常时,应使用此步骤。要启用过时连接检查,请在user.properties中设置以下属性:
http.connection.stalecheck$Boolean=true
建议#9:在Web服务器上启用HTTP Keep-AliveKeep-Alive是HTTP协议的一个非常重要的特性。它允许客户端通过单个TCP连接发出多个HTTP请求。这提供了很大的性能提升,因为否则建立许多TCP连接将产生大量不必要的网络开销。
建议#10:检查负载均衡器配置
如果负载测试遇到负载均衡器前端的应用程序,请确保负载均衡器配置了足够的最大连接限制以处理预期负载。同样,验证负载平衡算法不会将过多的流量偏向一个或多个应用程序服务器实例,并且该负载充分分散在应用程序服务器后端之间。
10 .高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案
(1)问题产生:使用500个线程并发下载tomcat工程中的一个文件时,服务器出现java.net.SocketException: Connection reset异常,
客户端出现connect timeout;
(2)分析认为是服务器连接超过最大并发数而重置,导致客户端连接超时;
于是配置tomcat的配置文件,修改最大并发连接数:
在/home/econf/apache-tomcat-6.0.20/conf目录下,修改server.xml 在
之后重启tomcat
此问题解决
11. Jmeter 遇到的问题:rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response mess
在使用Jmeter压测时,遇到日志中有大量的错误:
rc="Non HTTP response code: java.net.NoRouteToHostException" rm="Non HTTP response message: Cannot assign requested address" 如下图:
原因:Jmeter 发压机的端口不够用
解决办法: 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 ,使设置立即生效。

标签:jmeter报错信息处理
上一:http服务响应码