这个问题在这里已有答案:
我的Java Web应用程序在一段时间内正在放慢速度。当我检查资源利用率时,我发现java.exe占用的CPU更多。
当我将线程转储分析时,以下线程被突出显示为最高消费者。
VM Thread" prio=10 tid=0x000000001ba2f000 nid=0x3504 runnable
这个帖子的目的是什么?如何以及为什么它会减慢我的申请速度?我该如何逮捕这个?
这是一个系统线程;请参阅What does java "VM thread" do?如果耗费大量时间,可能意味着您的JVM正在做很多“停止世界”垃圾收集。
如果您的JVM花费大量时间进行垃圾收集,这通常意味着您的堆已接近满,并且您将接近将导致OutOfMemoryError
失败的点。
这种事情有两种可能的原因:
在前一种情况下,您可以增加堆大小或减小问题大小,也可以修改应用程序以更有效地使用内存。请注意,如果不断增加堆大小,最终必须担心机器中是否有足够的地址空间和物理RAM。
在后一种情况下,您需要查找并修复导致内存泄漏的应用程序上的错误或错误。有很多关于查找和修复Java内存泄漏的文章。