was6.0.17+spring+hibernate+myfaces下CPU占用率异常上升
概况:一个300在线用户的系统
web服务器(8CPU+8G)windows2003adv + jdk1.4.2 + was6.0.17 + ihs
数据库(8CPU+8G)AIX5.3 + oracle10g
spring2.0 + hibernate3.2 + myfaces1.13
系统已运行了2年;
数据库外键连接较多,查询相对较慢,如查询某些报表会耗费最长45秒(但并发数不超过5)
was同时部署2个类似应用(如给两个地区的用户使用),这2个应用通过hibernate默认连接池同时连接上述oracle服务器
系统一年以前(即数据量较小)运行基本正常。
应用程序有修改,但主要是优化数据库和少部分程序
症状描述(文中说session时,只指数据库session):
1、当某一用户占用web服务器CPU50%以上(大多时候是占满一个CPU)时,其他CPU占用率也同时一定程度上升;
2、当某以用户占用web服务器CPU占满一个CPU时,其他CPU占用率也同时快速上升(如普遍占到20%到30%);
3、进入WAS控制台,进入查看运行时信息(即需要一个CPU高负荷运行)时,看到其他CPU占用率也同时一定程度上升;
4、当所有CPU占用率上升时,oracle session数量也会增加(如:当session数量为40以下,属于非常良好的情况,这时哪怕CPU占用率上升,也会一段时间后降下来,当session数量为60以上时,当CPU上升如60%以上,那么CPU占用率将越来越高,在极偶尔的情况或能在较长时间后CPU下降,然后系统逐渐恢复正常,session数量缓慢回落);
5、后来使用proces易做图p(查看进程的各种细节,如线程情况),在CPU占用率上升初期,将占满一个CPU的那个线程suspend,运气好的话,CPU马上恢复正常,session数量缓慢下降,如果已经到了上升后期,则机器的CPU占用率80%以上时,用户访问几无反应,此时,使用proces易做图p对线程进行处置的成功率已经比较小;
6、最近这两天,在系统重启后会CPU占用率会突然上升,而之前,系统重启后就基本解决问题(这段时间没有任何更改)。
总结:
感觉JAVA.EXE里的线程呈现一种感染特性,只要有一个JAVA线程占满一个CPU,则其他用户请求线程也会逐渐提高CPU占用率;(非JAVA线程没有这样的情况,如在注册表里搜索一个长字符串,占满一个CPU,但其他CPU不受影响)
数据库查询哪怕的确可能出现几个用户同时查询大报表的情况,但毕竟主要是占用数据库CPU。
问题:
1、有哪位兄弟也遇到过CPU感染上升这样的情况,解决没有,怎么解决的?
2、有没有可能是虚拟机或WAS的BUG?
谢谢!
补充:企业软件 , WebSphere