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