环境: struts + ibatis + sqlserver2005,一小时活动用户大概120。一段时间(10天)后就非常慢,但是不死,jvm的内存,线程数、cup值都正常。生产是jboss4.2,win7系统, 生产慢的时候,又开了一个tomcat连接相同数据库,tomcat正常使用。请高手指点....
另外ibatis配置请帮忙看一下,是否存在不合理。
<sqlMapConfig>
<settings
maxRequests="1024"
maxSessions="256"
maxTransactions="64"
/>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="DBCP">
<property name="JDBC.Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:sqlserver://SGHVMAPP36;databasename=funddb;SelectMethod=Cursor"/>
<property name="JDBC.Username" value="aaaa" />
<property name="JDBC.Password" value="1234567" />
<property name="Pool.MaximumActiveConnections" value="200" />
<property name="Pool.MaximumIdleConnections" value="50" />
<property name="Pool.MaximumWait" value="1000" />
<property name="Pool.ValidationQuery" value="select getdate()" />
<property name="Pool.LogAbandoned" value="false" />
<property name="Pool.RemoveAbandoned" value="true" />
<property name="Pool.RemoveAbandonedTimeout" value="300" />
</dataSource>
</transactionManager>
另外ibatis配置请帮忙看一下,是否存在不合理。
<sqlMapConfig>
<settings
maxRequests="1024"
maxSessions="256"
maxTransactions="64"
/>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="DBCP">
<property name="JDBC.Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:sqlserver://SGHVMAPP36;databasename=funddb;SelectMethod=Cursor"/>
<property name="JDBC.Username" value="aaaa" />
<property name="JDBC.Password" value="1234567" />
<property name="Pool.MaximumActiveConnections" value="200" />
<property name="Pool.MaximumIdleConnections" value="50" />
<property name="Pool.MaximumWait" value="1000" />
<property name="Pool.ValidationQuery" value="select getdate()" />
<property name="Pool.LogAbandoned" value="false" />
<property name="Pool.RemoveAbandoned" value="true" />
<property name="Pool.RemoveAbandonedTimeout" value="300" />
</dataSource>
</transactionManager>
这个应该来说可以初步排除数据库存在问题。你说:“jvm的内存,线程数都正常”,但不知道你所说的正常是指什么:
内存的话,至少要看看GC频度;
线程的话,应该看看空闲线程数,最好能跟踪 ThreadDump 信息;
另外连接池也应该观察观察;
此外应该考虑用些页面来进行测试排查环境因素,比如:
空JSP页面请求;
非常简单的JDBC查询的JSP:select * from dual;
使用连接池进行查询的JSP;
使用频度高的函数调用,如权限检查、登录等;
其它受怀疑的函数调用;
多谢分析,提的方法我的试试。补充信息:
jconsole跟踪查看,内存、线程的使用程度与正常使用相同,比峰值小一些,线程没有死掉的
gc通过jobss中run.bat配置打印出日志,gc频率一直稳定出问题前一小时,连接池情况 活动 pool.getNumActive()最多也只有16个。挂起数pool.getNumIdle()最大也只有十几个。让测试人员分别作了50,300,500并发测试,测试的时候再使用系统比较慢(50时不是很慢,其他很慢),测试结束后就恢复正常。现在我也比较怀疑,ibatis2.3\dbcp1.2.2 哪有什么问题,或配置问题 还在查找....
还请大家多多帮忙分析,谢谢!
但是130个并发测试时pool.getNumActive()一直都是100多,而生产出问题时只有十几或几,