我正在开发ajax仪表板的JMeter脚本。用户登录,导航到存储库,单击仪表板链接,等待仪表板显示,然后注销。JMeter java.net.SocketException:套接字关闭
仪表板有五个dashlets。我在脚本中已经谈到了五个采样器对,每个采样器对应一个采样器。每一对中的第一个采样器都有一个POST REST请求,并在主体中带有ajax。有一个正则表达式提取器从响应的主体中提取一个id。这个ID被添加到该对的第二个采样器中的URL,该对中的body还包含POST REST请求和ajax。
当这些采样器有一对或两对时,脚本100%的时间工作,执行采样器返回HTTP 200响应,并正确替换每对中第一个采样器提取的id,然后退出采样器(exit.html)。当添加第三对采样器时,我每10-15次执行一次就会得到SocketException。随着四对启用它发生得更频繁,并与第五对启用它发生100%的时间。
奇怪的是SocketException发生在注销采样器中,没有其他采样器。另外,如果注销采样器被禁用,套接字例外从不发生,它可以在100%的时间内工作。
下面是完整的堆栈跟踪:
java.net.SocketException: Socket closed
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1676)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1672)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.readResponse(HTTPJavaImpl.java:258)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:514)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.followRedirects(HTTPSamplerBase.java:1486)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.resultProcessing(HTTPSamplerBase.java:1561)
at org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl.resultProcessing(HTTPAbstractImpl.java:338)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.sample(HTTPJavaImpl.java:588)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1141)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1130)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:431)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:258)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:689)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1324)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2691)
at java.net.URLConnection.getHeaderFieldLong(URLConnection.java:639)
at java.net.URLConnection.getContentLengthLong(URLConnection.java:511)
at java.net.URLConnection.getContentLength(URLConnection.java:495)
at org.apache.jmeter.protocol.http.sampler.HTTPJavaImpl.readResponse(HTTPJavaImpl.java:224)
... 12 more
我希望得到任何帮助调试此
感谢您的回复。问题不在于链接中的连接重置问题。我使用Wireshark来检查流量,发现在一个样本的一个样本正在关闭另一个样本所需的另一个样本的连接之间发生碰撞,从而导致Socket关闭异常。我通过将每个Dashlet分别记录到单个事务控制器中来解决它,所以现在没有冲突。 – 2015-03-23 23:01:21
所以现在,我有五个事务控制器同步执行,它们在浏览器中异步运行。在你提到的文章中,他们说使用JSR223采样器来运行ajax请求,但是我所看到的例子甚至没有使用ajax。您可以充实一下JSR223采样器如何解决这个问题吗? – 2015-03-23 23:19:22