公司产品在做验收,压力、负载测试全部通过了,目前在做稳定性测试,计划是让200人(分属不同的用户组,做不同的操作)负载不间断运行200小时,产品用的是公司内部的标签库+spring2.5+struts1.2.9+hibernate3.3,ehcache作为二级查询缓存,默认使用apache的dbcp连接池,但经测试后十分不稳定,换c3p0后效果好些,但是运行20小时左右就持续抛出jdbc fails等异常,接着出现out of memory。。。最后无奈把连接池切换到proxool,
具体配置如下
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
<property name="driver">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="driverUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>cap</value>
</property>
<property name="password">
<value>cap</value>
</property>
<property name="alias">
<value>dbpool</value>
</property>
<property name="prototypeCount">
<value>5</value>
</property>
<property name="maximumConnectionCount">
<value>100</value>
</property>
<property name="minimumConnectionCount">
<value>10</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
情况开始好转,然而好景不长,系统稳定运行了96小时后,开始抛出一下异常:
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
10528328 [http-8080-Processor352] ERROR org.hibernate.transaction.JDBCTransaction - JDBC begin failed
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: socket write error
STACKTRACE:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5395)
at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:162)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
at $java.io.Serializable$$EnhancerByProxool$$4c8217cb.setAutoCommit(<generated>)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:91)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:558)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTra
nsactionManager.java:377)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(Transaction
AspectSupport.java:263)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5395)
at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:162)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
at $java.io.Serializable$$EnhancerByProxool$$4c8217cb.setAutoCommit(<generated>)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:91)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:558)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTra
nsactionManager.java:377)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(Transaction
AspectSupport.java:263)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at java.lang.Thread.run(Thread.java:595)
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
利用proxool提供的监控工具,几百万个事务全部正常执行,loadrunner的事务也全部正常,没有任何失败和错误的事务,这下我突然间没辙了,tomcat的jvm参数,连接池参数,我全设置过了,也排除了内存泄漏和连接池没释放的情况,我的困惑有下:
1.产生这样的异常还会有哪些原因呢?
2.各位在对项目或者产品进行稳定性测试的时候,真的都做到后台不报出任何异常?
分享到:
相关推荐
无穷的困惑:个体行为的基础是什么?.pptx
破解内部审计的困惑与问题是一份关于内部审计的课后测试,涵盖了内部审计的基础知识、审计模式、风险评估、内控要素、审计独立性等方面的知识点。本文将对这些知识点进行详细的解释和分析。 一、内部审计的基础知识...
电改困惑:中国新能源并网为何难.pdf
投资界的最大困惑:何处寻找未来的腾讯和阿里
困惑度是一种评估语言模型好坏的指标,定义为exp^{ - (∑log(p(w))) / (N) },其中P(W)是指测试集中出现的每个词的概率,N是测试集中出现的所有词的数量。该指标可以用来评估语言模型的好坏,越小的困惑度表示语言...
在信息技术高速发展的今天,IT行业已经成为了众多青年才俊奋斗和实现梦想的热土。面对这样一个充满机遇与挑战的领域,许多人感到既兴奋又迷茫...在这本书的陪伴下,我们每个人都可以成为在IT的天空中展翅翱翔的小小鸟。
测试射频电感时,关于补偿值的问题往往让刚接触这类产品的小伙伴感到困惑,这么小的电感量,为什么要在测试电感量的基础上增加补偿值来校准?实际线路设计中该如何处理这个补偿值问题呢?补偿值的庐山真面目 射频...
可用性测试的类型可以分为两类,一类是形成性的测试,也即是前期或中期设计测试,在产品产出前对产品可用性进行测试。发现可用性问题,改善产品体验;一类是总结性测试,在产品后期迭代改版,也即产品上线后整个过程...
它可以帮助测试人员发现软件在压力下的瓶颈,从而提高系统的可靠性和稳定性。 ##### 3.1 LoadRunner的基本组成 LoadRunner主要由以下几个部分组成: - **Virtual User Generator (VUG)**:用于录制用户的行为脚本...
之前分享过一篇C#进阶系列——WebApi接口传参不再困惑:传参详解,这篇博文内容本身很基础,没想到引起很多园友关注,感谢大家的支持。作为程序猿,我们都知道参数和返回值是编程领域不可分割的两大块,此前分享了下...
性能测试是IT行业中一个至关重要的环节,特别是在软件开发与维护过程中,它用于评估系统的承载能力、响应速度以及稳定性。"性能测试报告模板.rar"提供的内容是帮助测试人员规范地记录和展示性能测试结果的一种工具。...
在稳定性方面,ChatGPT 的生成模型本质上是一个概率模型,存在输出不稳定的问题,可能会导致相同的输入产生不同的响应,从而给用户带来困惑和不确定感。为了提高 ChatGPT 的稳定性,可以考虑引入模型的先验知识和...
2. 性能测试:评估系统在高负载或长时间运行条件下的响应速度、稳定性、资源消耗等。对于界面测试,这可能涉及页面加载速度、交互延迟等方面。 3. 兼容性测试:确保软件在不同的硬件、操作系统、浏览器或移动设备上...
在实践中,测试报告的编写需要注意以下几点: 1. 测试报告应该根据实际情况进行调整和修改,以适应不同的项目和测试需求。 2. 测试报告应该具有明确的结构和格式,以便读者能够快速了解测试的目的、结果和结论。 3....
性能测试旨在评估系统的响应速度、稳定性和资源消耗等指标,确保在预期的工作负载下能够正常运行。 - **并发、PV、疲劳、稳定性测试**:通过模拟大量用户同时访问来检验系统性能。 - **返回时间**:即响应时间,衡量...
- **1.5 21个关键域**:列举了21个关键领域,每个领域都是测试过程中不可或缺的部分,涵盖了从需求分析到维护阶段的各个方面。 - **1.6 34个方法**:介绍了34种测试方法和技术,这些方法和技术可以帮助测试人员更...
在软件开发过程中,测试是至关重要的环节,它确保产品的质量,发现并修复潜在的问题,以提供用户一个稳定、高效和安全的使用体验。本文将详细探讨“测试中的常见问题分析”,涵盖形象类问题、可用性问题和稳定性问题...
在本次的“H-B组测试需求评审汇总1...综上所述,此次评审暴露了文档编写、测试设计和执行、以及性能指标定义等方面的问题,这些问题都需要在后续的工作中进行改进和完善,以保证基于Scrapy的WebUI项目的质量和可靠性。
- **启示**:即使在快速变化的企业环境中,也应尽量保持评估标准的稳定性,或者采用相对绩效评估的方式。 **案例四:划船与搭便车** - **团队合作与个体贡献**:在团队项目中,每个人都应对自己的工作负责。如果...