websphere报表应用挂起原因及解决方法

现象:

当登陆用户达到比较高的并发数量的时候,应用服务器的JVM使用的内存逐渐上升,最终达到了允许的最大值,同时应用服务器的CPU占用率达到了100%,不再响应页面访问请求。

分析:

[11-10-14 10:55:41:172 CST] 4a0e4513 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 11”(75d80516)已活动了 602,719 毫秒,可能被挂起。服务器中可能被挂起总计 7 个线程。

[11-10-14 10:55:41:297 CST] 4a0e4513 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 9”(619b8510)已活动了 601,297 毫秒,可能被挂起。服务器中可能被挂起总计 8 个线程。

[11-10-14 10:55:41:297 CST] 4a0e4513 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 10”(7531c516)已活动了 615,484 毫秒,可能被挂起。服务器中可能被挂起总计 9 个线程。

[11-10-14 10:55:42:141 CST] 4a0e4513 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 7”(66e64512)已活动了 730,406 毫秒,可能被挂起。服务器中可能被挂起总计 10 个线程。

 

通过以上可以看出JVM内存已满,线程被挂起。

随着应用程序同时操作的用户增多,JVM内存占用逐渐增高,垃圾收集器的内存收集跟不上内存增长的速度,最后导致内存耗尽,应用服务器不再响应。 

分析可能原因:

1、数据库连接池设置失误

 当前生产机器数据库连接池最大允许连接数,如果连接数设置过小,或者数据库查询非常耗时,那么就会立刻导致数据库连接不够用,那么后续的访问请求就会统统挂起等待空闲的数据库连接池。由于当前软件系统是在EJB里面访问数据库,那么一旦登陆系统的用户达到很高的数量,那些访问数据库的EJB线程统统被挂起等待,并且这些EJB的全局容器事务也被统统挂起等待,而调用这些EJB的Servlet线程也统统挂起等待。其结果就是,一旦并发访问的用户数量比较多的时候,数据库连接池就满了,接下来所有的Servlet线程,EJB容器事务,EJB实例统统挂起,最后导致JVM内存溢出,系统宕机。数据库连接池设置数量过小,是导致性能故障最重要的原因

 解决方法:

1、看一下连接数是多少,在应用服务器上面修改数据库连接池最大数量为100或者更多,当然也不能是无限大。

2、检查一下是否有大数据量报表或运算比较耗时的报表,如果这种报表并发比较大,响应的时间会比较慢,也有可能是导致服务挂起的原因

3、检查一下数据源连接情况,重点检查有没有连接不释放的情况或者有无不合理的查询语句。

4、出现CPU利用率100%,线程挂起,一般不是内存的问题,程序中很可能存在死线程。典型的就是程序中的死循环导致线程一直存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值