为什么VM线程会减慢我的Web应用程序的速度?

时间:2019-04-30 05:01:55

标签: java performance java-threads thread-dump

我的Java Web应用程序在一段时间内变慢。在检查资源利用率时,我发现java.exe消耗了更多的CPU。

当我使用线程转储进行分析时,以下线程被突出显示为主要使用者。

VM Thread" prio=10 tid=0x000000001ba2f000 nid=0x3504 runnable

该线程的目的是什么?为什么以及为什么会减慢我的申请速度,我该如何逮捕它?

1 个答案:

答案 0 :(得分:2)

这是一个系统线程;请参见What does java "VM thread" do?。如果这花费大量时间,则可能意味着您的JVM正在执行大量的“停止世界”垃圾收集工作。

如果您的JVM花费大量时间进行垃圾收集,那通常意味着您的堆已接近满,并且您将接近发生OutOfMemoryError故障的地步。

这种情况有两种可能的原因:

  • 您的堆对于您要执行的计算而言太小了。
  • 您的应用程序存在内存泄漏。

在前一种情况下,您可以增加堆大小或减小问题大小,或者修改应用程序以更有效地使用内存。请注意,如果继续增加堆大小,最终将不得不担心计算机中是否有足够的地址空间和物理RAM。

在后一种情况下,您需要查找并修复导致内存泄漏的应用程序错误。关于发现和修复Java内存泄漏的文章很多。