性能压测之:构造垫底数据,出现的坑

1、用 jmeter 构造 50万注册用户数据, 测试并发 每秒 500,迭代 1000次,在运行到 2-5分钟时就报错 :

org.apache.http.conn.HttpHostConnectException: Connect to mall.weilaijishi.cn:80 [mall.weilaijishi.cn/47.111.51.188] failed: Connection timed out: connect
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:331)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:832)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:570)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)

2、连接超时,这个连接超时可能出现问题在于 客户端 和服务端都有可能,先排查加压机客户端这边,在jmeter http请求 页面,advanced 页签, 有 timeout 设置,把 connect 和 response 端都设置为 30 000 (30s);

性能压测之:构造垫底数据,出现的坑

3、让请求端 和服务端 的 timeout 为 30s,重新压测,这时连接超时错误率有所降低,但是 tps 比较小,响应时间较长。还需要进行优化。

4、这时应考虑是不是jmeter工具本身的问题,经修改 jmeter.properties 中:

httpclient4.idletimeout=30000 (延迟 30 s,一般设置为 10 - 60 s ) 。重新压测,这时 连接超时错误率下降为 10%以下,tps 和 响应时间比原来提高 1倍以上。问题解决!

5、继续往下分析: 如果还出现很多 timeout,那就要开发去排查服务端的问题了,代码层去分析原因了。

猜你喜欢

转载自blog.51cto.com/14103476/2607702