【问题标题】:Why is the VM thread slowing down my web application? [duplicate]为什么 VM 线程会减慢我的 Web 应用程序的速度? [复制]
【发布时间】:2019-04-30 05:01:54
【问题描述】:

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

当我对线程转储进行分析时,以下线程被突出显示为最高消费者。

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

这个帖子的目的是什么?它如何以及为什么会减慢我的申请速度,我该如何阻止呢?

【问题讨论】:

  • 你是怎么得到转储的?
  • 我是用 jstack 搞定的

标签: java performance java-threads thread-dump


【解决方案1】:

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

如果您的 JVM 花费大量时间进行垃圾收集,这通常意味着您的堆已接近满,并且您即将遇到 OutOfMemoryError 故障。

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

  • 您的堆对于您尝试执行的计算来说太小了。
  • 您的应用程序存在内存泄漏。

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

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

【讨论】:

  • also : G1GC(或 shenandoah,甚至)将把他的问题大大推迟到未来,甚至可能远远超出他的 webapp 的生命周期...... 如果 那是什么这对他来说是可取的(我的经验是初学者通常倾向于解决问题而不是解决问题,所以这对他来说可能是一个值得一提的解决方案)
  • 其他读者注意:这里的 G1GC ? 是Garbage First Garbage Collector,这是一种调整 VM 以使 gc 有效发生的方法。但是,必须注意,它可能只是消除症状,而不是解决实际问题。如果存在内存泄漏或没有足够的堆空间供您使用(内存使用效率低/设计不良/ ...),您必须在代码中解决它。
  • 如果问题是内存泄漏,那么 GC 调优不是一个好的解决方案。这是创可贴...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2019-05-29
  • 2020-02-29
  • 2018-03-11
  • 2010-11-17
  • 2012-01-17
相关资源
最近更新 更多