我在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)
在查看代码时,有一个同步方法 解释锁。但是,我想知道锁定是否会减慢速度 那么为什么它没有从新的开始表现出来,为什么只有在之后呢? 跑了几天。想知道在哪里看。有线索吗?提前谢谢。
答案 0 :(得分:0)
我建议您使用jmeter或soapui之类的东西进行基本测试。
缓慢增加负荷,看看会发生什么:平均时间是通过屋顶还是只是变慢了?您是否收到错误或是否仍然正常运行?
同时,打开visualvm并查看您的VM。你可能碰到一个内存pbs,GC忙着试图释放未使用的实例或锁?使用线程转储和堆转储功能来进一步了解。
我在一个非常古老的应用程序上执行了这样的测试,并发现log4j 1.x在多线程方面存在很大问题:升级到log4j 2 - &gt;问题解决了!
希望这有帮助。