This question already has an answer here:
JDK7 Application is getting slow after some Uptime
                                
                                    (1个答案)
                                
                        
                                3年前关闭。
            
                    
我们的应用程序(在数据库方面)包括三个部分。使用EJB的遗留部分,使用hibernate / spring的当前应用程序和使用Mybatis的第三方库。一个会话中的数据库操作由JTA协调。该应用程序配备了基本的APM。

最近,我们看到了一个非常奇怪的行为,但是还无法重现和分析它:我们的应用程序通常在休眠状态下可以正常执行,但是在这种情况下,应用程序所有部分的其他会话都会产生一些负载。在此事件期间,APM报告的在EJB / Spring部分中执行事务的时间增加了十倍。我们看到那些执行EJB / Spring事务的线程的CPU使用率很高,即使在事务中执行的实际代码很少。

经过分析,我们了解到那些被监视的时间包括我们的业务代码以及Hibernate-Flush花费的时间。我们还看到了实体管理器中的元素数量与完成交易所花费的时间之间的相关性。

我们目前的怀疑是,由于某种原因,同花顺正在发疯。

有没有人看到过这样的东西,或者不知道可能是什么原因?

最佳答案

答案完全在别处。我们偶然发现了JDK7 / CodeCache错误,一旦CodeCache填满,它会导致JIT编译器完全停止编译任何东西。这导致许多代码以解释模式执行,因此比预期的要慢很多。

这使得冲洗变慢,并表现为邪恶的行为。

如果您发现自己的应用程序运行缓慢,并且仍在运行JDK7,请查看您的CodeCache内存区域。如果它已经填充到100%,然后突然下降到〜50-66&并且不再增长,那么您就遇到了该错误。

提示:在这里可以找到更详细的解释:JDK7 Application is getting slow after some Uptime

09-04 09:38