Webapp在Tomcat上变得迟钝

时间:2012-07-10 21:47:56

标签: performance tomcat7

我在Tomcat 7.0.23上运行了一个Web应用程序(spring / hibernate)。症状 经过几天(通常是4到5天)的反应后 变得很慢。通常在2秒内加载的页面占用任何位置 从30到50秒。重启会使响应恢复正常(2 秒)。我之前和之后都进行过线程转储。我看到了线程 问题(需要更长的时间来回应)有一个锁定。这里是 片段。

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)

在查看代码时,有一个同步方法 解释锁。但是,我想知道锁定是否会减慢速度 那么为什么它没有从新的开始表现出来,为什么只有在之后呢? 跑了几天。想知道在哪里看。有线索吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议您使用jmeter或soapui之类的东西进行基本测试。

缓慢增加负荷,看看会发生什么:平均时间是通过屋顶还是只是变慢了?您是否收到错误或是否仍然正常运行?

同时,打开visualvm并查看您的VM。你可能碰到一个内存pbs,GC忙着试图释放未使用的实例或锁?使用线程转储和堆转储功能来进一步了解。

我在一个非常古老的应用程序上执行了这样的测试,并发现log4j 1.x在多线程方面存在很大问题:升级到log4j 2 - &gt;问题解决了!

希望这有帮助。

相关问题