请教tomcat5.0.27server状态线程堆积的问题

06-04-12 ll0012
运行环境windows 2003+jdk1.4+tomcat5.0.27.后面数据库为oracle9i

配置及运行状态:

jvm

Free memory: 796.39 MB Total memory: 988.93 MB Max memory: 988.93 MB

http-80

Max threads: 500 Min spare threads: 25 Max spare threads: 75 Current thread count: 319 Current thread busy: 280

Max processing time: 429031 ms Processing time: 20028 s Request count: 139289 Error count: 20925 Bytes received: 3.12 MB Bytes sent: 522.09 MB

Stage Time B Sent B Recv Client

S 20441500 ms 0 KB 0 KB 220.169.128.23

S 21154609 ms 0 KB 0 KB 220.169.128.23

S 20591484 ms 0 KB 0 KB 61.187.123.245

还有很多

stage处于sever状态的线程数过高,且执行时间长的不可思议。tomcat日志中有与数据库连接失败报出,数据库并发线程没有用完。

目前,每次只有在线程快爆时重启tomcat,导致用户抱怨。

大家帮我看看是什么原因,有什么好办法。

banq
2006-04-13 10:31
典型的内存泄漏。

想像一下,一个客户端访问服务器,服务器通过Servlet启动一个线程,然后调用你的业务JavaBeans,再从数据库连接池中挑选一个空的连接打开数据库链接访问数据库,访问完毕,将数据库连接返回连接池,Servlet线程也返回Web线程池。

现在你的问题就出在最后,用了不返回了,就是借人家资源东西不归还了,可能不只是数据库连接没有关闭那么简单。

使用专门的Profiler工具如optimizeit或load runner等来进行跟踪,看看到底是哪里发生死锁或者那个类不断耗费内存,主要可能是一些重要状态对象被程序员hold在内存中,没有释放。

猜你喜欢