前几天,有了新的接口性能测试需求,同事在添加 HTTP请求 后,运行时响应信息以下所示:java
1 java.net.SocketException: Permission denied: connect 2 at java.net.DualStackPlainSocketImpl.connect0(Native Method) 3 at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 4 at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) 5 at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 6 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 7 at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 8 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 9 at java.net.Socket.connect(Socket.java:589) 10 at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127) 11 at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) 12 at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) 13 at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643) 14 at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 15 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 16 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 17 at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:505) 18 at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:328) 19 at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74) 20 at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1141) 21 at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1130) 22 at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:431) 23 at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:258) 24 at java.lang.Thread.run(Thread.java:745)
通过问询谷大爷,查了一下,发现只要在启动脚本里添加 -Djava.net.preferIPv4Stack=true
参数,将其网络偏心设置为 IPv4。设置以下所示:apache
启动配置文件路径:{JMeter 主目录}\bin
Linux 启动配置文件:jmeter.sh,添加以下启动参数设置:
export JVM_ARGS="-Djava.net.preferIPv4Stack=true"
Winows 启动配置文件:jmeter.bat,添加以下启动参数设置:
set JVM_ARGS="-Djava.net.preferIPv4Stack=true"网络
从新启动 JMeter 运行脚本便可解决以前的报错。socket
后记:性能
问题解决后,做为一名专职测试人员,我问本身难道是开发对此接口设置了 IPv4 偏好 ?!想一想不该该呀。。。为防止用户在访问上述接口出现此问题,我仍是去找相应的接口开发人确认了一下。经确认其未进行相应的设置,同时查看源码遍历 IPv 信息,也未发现有相应的设定!测试
新的问题出现了,是什么致使了其访问接口的时候,偏好了 IPv4 的呢 ????.net
正所谓,功夫不负有心人!后经努力,查询 JDK 的 Networking Properties 才获得了最终的答案,以下所示。code
后来查询了一下 JMeter 的用户手册,发现能够经过修改其配置文件,实如今任意系统的移植,而不须要改每一个系统对应的启动文件。blog
系统配置文件:{JMeter 主目录}\bin\system.properties,将 java.net.preferIPv4Stack 设置为 true 便可接口