2012-07-10 48 views
1

我有一个运行在Tomcat 7.0.23上的web应用程序(spring/hibernate)。症状 是在运行几天后(通常为4至5天),响应 变得非常缓慢。通常在2秒内加载的页面需要从30秒到50秒的任何地方 。重新启动会使响应恢复正常(2 秒)。我在前后都进行了线程转储。我看到 问题(这是需要较长时间来回应)锁定。这里是 片段。Webapp在Tomcat上变得呆滞

at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) 
    at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    - locked <0x0000000799446298> (a 
org.apache.tomcat.util.net.SocketWrapper) 
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

一旦寻找到的代码,有一个同步的方法和 解释了锁。但是,我想知道锁定是否会减慢 的下降速度,为什么它没有从新的开始显示,为什么只有在 运行几天之后才显示。想知道在哪里看。任何线索?提前致谢。

回答

0

我建议你运行一个基本的测试,使用类似jmeter或soapui的东西。

缓慢增加负载,看看会发生什么:是通过屋顶的平均时间,还是只是慢一点?您是否收到错误或者是否仍在运行?

同时,打开visualvm并看看你的虚拟机。你可能碰到一个内存pbs,GC忙着试图释放未使用的实例或者可能是锁?使用线程转储和堆转储功能获得更多信息。

我在一个非常老的应用程序上执行了这样的测试,发现log4j 1.x在多线程中遇到了很大的问题:升级到log4j 2 - >问题解决了!

希望这会有所帮助。