JMeter踩坑汇总+问题集锦
1. 踩坑汇总
Response message: Non HTTP response message: connect timed out
查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
原因:短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间)
解决方法:在运行JMeter agent的机器上,添加注册表条目HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制块(1000-2000)
MaxHashTableSize:最大TCB Hash table数量(64-65536)
解析中值为10进制,下方脚本已全转换为16进制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
原因:观察运行jmeter机器的内存,占用较高,超过了jmeter设置的内存上限。
解决方案:修改jmeter配置文件,调整内存可用的范围
修改/bin/jmeter.bat文件:找到这2行
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms1024m –Xmx2048m(最大值不能超过系统内存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
Response message: Non HTTP response message: Read timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想。
原因:分布式测试时,server和agent之间的连接有问题。单个机器排查后,发现是某个agent机器安装了多个网卡,rmi远程的时候找的是虚拟机的网卡,导致连接失败。
解决方案:禁掉不使用的虚拟机网卡,测试之后再恢复。
内容编码设置为utf-8
内容编码设置为gb2312
jmeter.properties中的sampleresult.default.encoding参数,改成sampleresult.default.encoding=utf-8
jmeter安装路径,改参数E:jmeterapache-jmeter-3.0bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改为
sampleresult.default.encoding=utf-8
2. Jmeter问题集锦
Response message: Non HTTP response message: connect timed out
查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
原因:短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间)
解决方法:在运行JMeter agent的机器上,添加注册表条目HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制块(1000-2000)
MaxHashTableSize:最大TCB Hash table数量(64-65536)
解析中值为10进制,下方脚本已全转换为16进制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
原因:观察运行jmeter机器的内存,占用较高,超过了jmeter设置的内存上限。
解决方案:修改jmeter配置文件,调整内存可用的范围
修改/bin/jmeter.bat文件:找到这2行
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms1024m –Xmx2048m(最大值不能超过系统内存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
Response message: Non HTTP response message: Read timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想。
原因:分布式测试时,server和agent之间的连接有问题。单个机器排查后,发现是某个agent机器安装了多个网卡,rmi远程的时候找的是虚拟机的网卡,导致连接失败。
解决方案:禁掉不使用的虚拟机网卡,测试之后再恢复。
内容编码设置为utf-8
内容编码设置为gb2312
jmeter.properties中的sampleresult.default.encoding参数,改成sampleresult.default.encoding=utf-8
jmeter安装路径,改参数E:jmeterapache-jmeter-3.0bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改为
sampleresult.default.encoding=utf-8
3. JMeter测试问题:java.net.SocketTimeoutException: connect timed out,Read timed out
错误1:Response message: Non HTTP response message: connect timed out
错误分析:通过Load time值看,由于该线程耗费时间(3002)大于设置的connect time out(3000ms),因此抛出该异常。问题可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
JMeter原始错误信息:
概要:
Thread Name: 线程组 1-367
Sample Start: 2013-07-05 11:04:17 CST
Load time: 3002
Latency: 0
Size in bytes: 1677
Headers size in bytes: 0
Body size in bytes: 1677
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
详细信息:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
at sun.net.www.http.HttpClient.(HttpClient.java:234)
at sun.net.www.http.HttpClient.New(HttpClient.java:307)
at sun.net.www.http.HttpClient.New(HttpClient.java:324)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:487)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1088)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1077)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
at java.lang.Thread.run(Thread.java:662)
错误2:Response message: Non HTTP response message: Read timed out
错误分析:通过返回错误信息看,发生该错误时,JMeter已经连接上服务器,但是产生read time out。从load time(2998)看,所用时间并没有超过设定超时时间(3000),因此错误不大可能是JMeter本身产生的。一种可能是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
JMeter原始错误信息:
概要:
Thread Name: 线程组 1-10
Sample Start: 2013-07-05 11:12:45 CST
Load time: 2988
Latency: 0
Size in bytes: 2431
Headers size in bytes: 0
Body size in bytes: 2431
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
详细信息:
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:697)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2300)
at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:579)
at java.net.URLConnection.getContentLength(URLConnection.java:474)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.readResponse(HTTPJavaImpl.java:230)
关于JMeter结果指标值说明的:
http://www.cnblogs.com/Carrie_Liang/archive/2008/11/10/1330997.html
http://asmetg.blog.163.com/blog/static/105828863201111644313362/
回到通常的情况,最近几天,当我为一项测试增加虚拟用户数量时,遇到了以下错误。我试图测试低至90个虚拟用户的J2EE应用程序,每个虚拟用户的启动时间为一秒钟,延迟之间的间隔为一秒钟。
错误– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketTimeoutException:读取超时
错误– jmeter.protocol.http.sampler.HTTPSampler:原因:java.net.SocketTimeoutException:读取超时
错误– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketException:服务器中的文件意外结束
我花了几个小时试图在互联网上找到有关此错误消息的信息,但是在阅读了一些主题并注意到Google返回的结果少于我的搜索结果之后,我开始想像这不是我的jmeter中的问题配置,但在应用程序本身。当然,这本来应该是寻找的第一位,但是我有点失去了注意力,考虑了所有其他可能的因素,例如JMeter Agent内存,Glassfish一侧的最大连接数,Glassfish一侧的最大线程数, EJB池效率,JDBC池效率等。
因此,我首先尝试的是使用最少1个JMeter Agent(而不是3个)再次运行该测试,并将虚拟用户数量从1、2、4、6和10增加到10。一旦我开始对超过6个虚拟用户进行测试,错误就会开始出现。因此,我得出这样的结论:某些应用程序请求执行时间太长,使应用程序服务器的线程繁忙,并且不允许传入请求使用资源。
因此,我再次在一个简单的JMeter GUI中运行了相同的测试,将线程组配置为10个虚拟用户。结果呢?我的要求之一是大约需要30秒才能完成(对于10个用户),而大约要花6秒(对于1个虚拟用户),再次运行测试,逐渐增加n个虚拟用户,仅证实了我的理论,即响应时间在增加与虚拟用户数量成比例(当然,我在想什么?
很明显,当我的请求中有5个花了30秒以上才能完成(因此5个可用的http线程正忙)时,就没有空间容纳第六,第七等等。
因此,对于仍然在寻找该错误的所有人,它在您的应用程序实现中占90%以上。某种东西正在占用资源,服务器断开了连接。以增量方式检查所有请求,并找到瓶颈。
踩坑一:
Response code: Non HTTP response code: java.net.SocketTimeoutExceptionResponse message: Non HTTP response message: connect timed out
查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
踩坑二:
Java.NET.BindException: Address already in use: connect原因:短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间)
解决方法:在运行JMeter agent的机器上,添加注册表条目HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制块(1000-2000)
MaxHashTableSize:最大TCB Hash table数量(64-65536)
解析中值为10进制,下方脚本已全转换为16进制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
踩坑三:
java.lang.OutOfMemoryError: Java heap space原因:观察运行jmeter机器的内存,占用较高,超过了jmeter设置的内存上限。
解决方案:修改jmeter配置文件,调整内存可用的范围
修改/bin/jmeter.bat文件:找到这2行
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms1024m –Xmx2048m(最大值不能超过系统内存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
踩坑四:
Response code: Non HTTP response code: java.net.SocketTimeoutExceptionResponse message: Non HTTP response message: Read timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想。
踩坑五:
Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host:原因:分布式测试时,server和agent之间的连接有问题。单个机器排查后,发现是某个agent机器安装了多个网卡,rmi远程的时候找的是虚拟机的网卡,导致连接失败。
解决方案:禁掉不使用的虚拟机网卡,测试之后再恢复。
踩坑六:
接口参数有中文时,请求后传参是乱码?内容编码设置为utf-8
踩坑七:
接口参数化有中文时,请求后传参是乱码?内容编码设置为gb2312
踩坑八:
请求接口响应乱码,编码问题修改配置文件:jmeter.properties中的sampleresult.default.encoding参数,改成sampleresult.default.encoding=utf-8
jmeter安装路径,改参数E:jmeterapache-jmeter-3.0bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改为
sampleresult.default.encoding=utf-8
2. Jmeter问题集锦
踩坑一:
Response code: Non HTTP response code: java.net.SocketTimeoutExceptionResponse message: Non HTTP response message: connect timed out
查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
踩坑二:
Java.NET.BindException: Address already in use: connect原因:短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间)
解决方法:在运行JMeter agent的机器上,添加注册表条目HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制块(1000-2000)
MaxHashTableSize:最大TCB Hash table数量(64-65536)
解析中值为10进制,下方脚本已全转换为16进制
Windows Registry Editor Version 5.00
"MaxUserPort"=dword:fffe
"TcpTimedWaitDelay"=dword:1e
"TcpNumConnections"=dword:fffffe
"MaxFreeTcbs"=dword:7D0
"MaxHashTableSize"=dword:10000
踩坑三:
java.lang.OutOfMemoryError: Java heap space原因:观察运行jmeter机器的内存,占用较高,超过了jmeter设置的内存上限。
解决方案:修改jmeter配置文件,调整内存可用的范围
修改/bin/jmeter.bat文件:找到这2行
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms1024m –Xmx2048m(最大值不能超过系统内存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
踩坑四:
Response code: Non HTTP response code: java.net.SocketTimeoutExceptionResponse message: Non HTTP response message: Read timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想。
踩坑五:
Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host:原因:分布式测试时,server和agent之间的连接有问题。单个机器排查后,发现是某个agent机器安装了多个网卡,rmi远程的时候找的是虚拟机的网卡,导致连接失败。
解决方案:禁掉不使用的虚拟机网卡,测试之后再恢复。
踩坑六:
接口参数有中文时,请求后传参是乱码?内容编码设置为utf-8
踩坑七:
接口参数化有中文时,请求后传参是乱码?内容编码设置为gb2312
踩坑八:
请求接口响应乱码,编码问题修改配置文件:jmeter.properties中的sampleresult.default.encoding参数,改成sampleresult.default.encoding=utf-8
jmeter安装路径,改参数E:jmeterapache-jmeter-3.0bin文件jmeter.properties中
#sampleresult.default.encoding=ISO-8859-1改为
sampleresult.default.encoding=utf-8
3. JMeter测试问题:java.net.SocketTimeoutException: connect timed out,Read timed out
- JMeter测试计划线程组设置:Ramp-UP Period为5秒。勾选【delay thread creation until needed 】允许需要时创建线程。循环次数设为10。
- 线程组包含两个请求,分别是①上传数据,②下载数据。设置两个请求之间sleep 3000ms。其他为缺省设置。
- 每个请求connect time out:3000ms
- 每个请求response time out:3000ms
错误1:Response message: Non HTTP response message: connect timed out
错误分析:通过Load time值看,由于该线程耗费时间(3002)大于设置的connect time out(3000ms),因此抛出该异常。问题可能是由于服务端有较多请求正在处理(且处理时间较长),导致JMeter不能连接上服务器而产生的。
JMeter原始错误信息:
概要:
Thread Name: 线程组 1-367
Sample Start: 2013-07-05 11:04:17 CST
Load time: 3002
Latency: 0
Size in bytes: 1677
Headers size in bytes: 0
Body size in bytes: 1677
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
详细信息:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
at sun.net.www.http.HttpClient.
at sun.net.www.http.HttpClient.New(HttpClient.java:307)
at sun.net.www.http.HttpClient.New(HttpClient.java:324)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:487)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1088)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1077)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
at java.lang.Thread.run(Thread.java:662)
错误2:Response message: Non HTTP response message: Read timed out
错误分析:通过返回错误信息看,发生该错误时,JMeter已经连接上服务器,但是产生read time out。从load time(2998)看,所用时间并没有超过设定超时时间(3000),因此错误不大可能是JMeter本身产生的。一种可能是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
JMeter原始错误信息:
概要:
Thread Name: 线程组 1-10
Sample Start: 2013-07-05 11:12:45 CST
Load time: 2988
Latency: 0
Size in bytes: 2431
Headers size in bytes: 0
Body size in bytes: 2431
Sample Count: 1
Error Count: 1
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
详细信息:
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:697)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2300)
at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:579)
at java.net.URLConnection.getContentLength(URLConnection.java:474)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.readResponse(HTTPJavaImpl.java:230)
关于JMeter结果指标值说明的:
http://www.cnblogs.com/Carrie_Liang/archive/2008/11/10/1330997.html
http://asmetg.blog.163.com/blog/static/105828863201111644313362/
回到通常的情况,最近几天,当我为一项测试增加虚拟用户数量时,遇到了以下错误。我试图测试低至90个虚拟用户的J2EE应用程序,每个虚拟用户的启动时间为一秒钟,延迟之间的间隔为一秒钟。
错误– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketTimeoutException:读取超时
错误– jmeter.protocol.http.sampler.HTTPSampler:原因:java.net.SocketTimeoutException:读取超时
错误– jmeter.protocol.http.sampler.HTTPSampler:readResponse:java.net.SocketException:服务器中的文件意外结束
我花了几个小时试图在互联网上找到有关此错误消息的信息,但是在阅读了一些主题并注意到Google返回的结果少于我的搜索结果之后,我开始想像这不是我的jmeter中的问题配置,但在应用程序本身。当然,这本来应该是寻找的第一位,但是我有点失去了注意力,考虑了所有其他可能的因素,例如JMeter Agent内存,Glassfish一侧的最大连接数,Glassfish一侧的最大线程数, EJB池效率,JDBC池效率等。
因此,我首先尝试的是使用最少1个JMeter Agent(而不是3个)再次运行该测试,并将虚拟用户数量从1、2、4、6和10增加到10。一旦我开始对超过6个虚拟用户进行测试,错误就会开始出现。因此,我得出这样的结论:某些应用程序请求执行时间太长,使应用程序服务器的线程繁忙,并且不允许传入请求使用资源。
因此,我再次在一个简单的JMeter GUI中运行了相同的测试,将线程组配置为10个虚拟用户。结果呢?我的要求之一是大约需要30秒才能完成(对于10个用户),而大约要花6秒(对于1个虚拟用户),再次运行测试,逐渐增加n个虚拟用户,仅证实了我的理论,即响应时间在增加与虚拟用户数量成比例(当然,我在想什么?
很明显,当我的请求中有5个花了30秒以上才能完成(因此5个可用的http线程正忙)时,就没有空间容纳第六,第七等等。
因此,对于仍然在寻找该错误的所有人,它在您的应用程序实现中占90%以上。某种东西正在占用资源,服务器断开了连接。以增量方式检查所有请求,并找到瓶颈。
上一:JMeter报错信息处理
下一:没有了