并发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之前
相关推荐
性能测试调优分析是软件开发过程中的重要环节,旨在确保应用程序在高负载和大量并发用户情况下仍能保持高效稳定的工作状态。在这个过程中,我们通常关注响应时间、吞吐量、并发用户数等关键指标,通过一系列测试手段...
12. 高可用性设计 通过冗余硬件、故障切换机制、健康检查等手段,确保系统的高可用性,防止单点故障影响整个系统。总的来说,大型Java Web项目的架构和部署调优需要综合考虑各个层面,包括应用架构、数据库设计、...
- **测试路径**:压力测试机→Web服务器→应用服务器→数据库→挡板。 - **测试环境**:详细说明了测试中使用的资源和工具。 - **测试内容**:针对登录交易和登录+理财交易,分别设置了50和200个虚拟用户进行压力...
- 调整系统架构,如采用负载均衡策略分散压力,避免单点过载。 - 代码优化,减少不必要的计算和内存占用,提高程序运行效率。 - 数据库优化,例如索引调整、查询优化,以提高数据处理速度。 7. **结论** - TWMP...
2. **Web应用部署优化**:减少应用程序启动时的初始化工作,如延迟加载非必需的Servlet和Filter;合理组织静态资源,利用缓存技术提高访问速度。 3. **JAR包和WAR包瘦身**:删除无用的库文件,减少应用的体积,提高...
2. **压力测试设计**:理解如何构建代表真实用户行为的测试场景。 3. **数据分析**:收集和分析测试结果,识别性能瓶颈和故障点。 4. **性能调优**:根据测试结果调整系统配置或代码,提高性能和稳定性。 总的来说...
- **JMeter**:开源性能测试工具,适合Web应用的压力测试。 - ** Gatling**:轻量级、高性能的负载测试框架,用于Web应用。 在实际测试过程中,还需要关注系统的稳定性、响应时间的分布、错误率等关键指标,以全面...
2. **测试环境**:在实际生产环境之前,在模拟真实负载的测试环境中进行充分的测试,确保各项调优措施的有效性。 3. **版本兼容性**:注意检查所使用的软件版本之间的兼容性问题,避免因版本不匹配而导致的问题。 #...
例如,使用Selenium进行Web界面的功能测试,JMeter进行性能压力测试,AppScan进行安全性扫描。 4. **持续集成与自动化测试**:CI/CD(持续集成/持续部署)流程强调频繁集成和自动化测试,以快速发现并修复问题。...
- 压力测试:模拟超过正常工作负载的情况,观察系统崩溃或性能显著下降的临界点。 - 负载测试:在预期的正常和高峰负载下测试系统性能,确定系统处理能力和稳定性。 - 耐久测试(长事务测试):长时间运行测试,...
- ASP.NET在构建Web应用程序中的作用。 - ADO.NET在数据访问层的应用。 - SOAP和XML Web服务在实现跨系统互操作性中的角色。 - Visual Studio.NET工具套件中的开发技巧。 ##### 4. 第三部分:构建.NET电子商务...
它可以用于Web应用、移动应用等多种类型的测试。 **选择理由**:在实际项目中,我们通常会根据项目的特定需求来选择合适的工具。例如,如果项目预算有限或者需要一个易于上手的工具,则可能倾向于使用JMeter;而...
性能测试涵盖的方面包括压力测试、负载测试、并发测试、容量测试、配置测试和基准测试。测试的目的是评估系统能力,识别系统弱点,进行系统调优,以及验证系统的可伸缩性和可靠性。 性能测试指标主要包括响应时间、...
2. 日常压力测试:在基准测试通过后,接下来应进行的是模拟系统在日常使用情况下的压力测试。通过此类测试可以发现一些表面的性能问题,例如响应时间变慢、事务处理效率下降等,并对这些问题进行处理。日常压力测试...
- **第2章:J2EE项目的选择与风险** - 分析在进行J2EE项目时可能面临的选择和潜在的风险因素,帮助读者理解如何做出明智的决策。 - 讨论项目管理的最佳实践,包括需求分析、设计模式选择和技术栈的确定等方面。 -...
- 负载均衡:通过负载均衡设备或技术分散请求,避免单点过载。 - 异步处理:合理使用异步和消息队列技术,提升服务响应能力。 4. 数据库优化: - 选择合适的数据库类型:根据应用场景选择关系型数据库或非关系型...
从单一的线下测试到复杂的线上测试环境,从简单的单点评估到全方位的性能压测,这些变迁既展示了技术的进步,也代表了企业对性能测试的深入理解和重视。未来,随着技术的不断进步和业务场景的日益复杂,性能测试技术...
MVC (Model-View-Controller) 是一种常用的架构模式,在Web应用开发中尤为流行。这部分内容涉及: - MVC模式的基本原理及其在J2EE中的实现。 - 控制器组件的设计思路。 - 视图层的渲染技术和模板引擎的选择。 ####...