Web应用单点压力测试调优-第2季
并发1000,准备时间1s,让它产生大量的等待请求
第一次发起并发的时候,基本错误率在80%
间隔时间较短,多次发起并发
走势图
吞吐量
平均错误率在28%~38%之间,不稳定。
大规模的错误异常是tomcat连接超时
org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.137.233:8080 refused at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190) at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:481) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:298) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1105) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1094) at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:429) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257) at java.lang.Thread.run(Unknown Source) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ... 13 more
并发1000,准备时间2s,让它产生中量的等待请求。
预热稳定后,基本和准备时间1s差不多
并发1000,准备时间5s,让它产生少量的等待请求。
预热稳定后,基本和准备时间1s差不多
最后经多次测试,一般维持在750并发,2s准备时间,比较稳定。失败率在3.7%
报告
所以默认配置下,基本维持在750并发,吞吐量TPS在32~34左右。
调优1-将tomcat的http连接池数调大(后续的调优在前面的调优基础之上)
修改tomcat的server.xml内容
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="1000" minSpareThreads="100" maxSpareThreads="400" acceptCount="1200" /> |
参数解释:
maxThreads //最大线程数
minSpareThreads//初始化时创建的线程数
maxSpareThreads//一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中,请求数超过这个数的请求将不予处理
重启Tomcat,直接进行1000并发,准备时间2s测试
依然有很多连接异常
所以,调整tomcat的连接参数,稍微在修改一下tomcat配置文件
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="1200" minSpareThreads="300" maxSpareThreads="500" acceptCount="1500" />
继续压1000并发
预热后,得出走势图
吞吐量报告
经多次测试,1000并发,在100%成功率结果下,吞吐量很少上30/s。(TPS:34/s,错误率:5%)
另一次加压100%成功率走势图
报告
并发1200,准备时间1s
经多次测试,错误率基本达到70%~80%。
错误基本集中在
Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection |
top之后,发现系统负载率不高。
(未完待续)
标记:第9页的开始,标题-优化策略2之前
上一篇: 实例化bean的方式
下一篇: Oracle数据加密方法分析