为什么 VM 线程会减慢我的 Web 应用程序的速度?
Why is the VM thread slowing down my web application?
我的 Java Web 应用程序在一段时间内变慢了。当我检查资源利用率时,我发现 java.exe 消耗更多 CPU。
当我对线程转储进行分析时,以下线程被突出显示为最大消费者。
VM Thread" prio=10 tid=0x000000001ba2f000 nid=0x3504 runnable
这个帖子的目的是什么?它如何以及为什么会减慢我的应用程序速度,我该如何阻止它?
这是一个系统线程;请参阅 What does java "VM thread" do? 如果它消耗了大量时间,则可能意味着您的 JVM 正在执行大量 "stop the world" 垃圾收集。
如果您的 JVM 花费大量时间进行垃圾收集,这通常意味着您的堆已接近满,并且您已接近 OutOfMemoryError
失败的临界点。
出现这种情况可能有两种原因:
- 您的堆对于您尝试执行的计算来说太小了。
- 您的应用程序存在内存泄漏。
在前一种情况下,您可以增加堆大小,或者减小问题大小,或者修改应用程序以更有效地使用内存。请注意,如果您不断增加堆大小,您最终将不得不担心您的机器中是否有足够的地址 space 和物理 RAM。
在后一种情况下,您需要查找并修复应用程序中导致内存泄漏的一个或多个错误。有很多关于查找和修复 Java 内存泄漏的文章。
我的 Java Web 应用程序在一段时间内变慢了。当我检查资源利用率时,我发现 java.exe 消耗更多 CPU。
当我对线程转储进行分析时,以下线程被突出显示为最大消费者。
VM Thread" prio=10 tid=0x000000001ba2f000 nid=0x3504 runnable
这个帖子的目的是什么?它如何以及为什么会减慢我的应用程序速度,我该如何阻止它?
这是一个系统线程;请参阅 What does java "VM thread" do? 如果它消耗了大量时间,则可能意味着您的 JVM 正在执行大量 "stop the world" 垃圾收集。
如果您的 JVM 花费大量时间进行垃圾收集,这通常意味着您的堆已接近满,并且您已接近 OutOfMemoryError
失败的临界点。
出现这种情况可能有两种原因:
- 您的堆对于您尝试执行的计算来说太小了。
- 您的应用程序存在内存泄漏。
在前一种情况下,您可以增加堆大小,或者减小问题大小,或者修改应用程序以更有效地使用内存。请注意,如果您不断增加堆大小,您最终将不得不担心您的机器中是否有足够的地址 space 和物理 RAM。
在后一种情况下,您需要查找并修复应用程序中导致内存泄漏的一个或多个错误。有很多关于查找和修复 Java 内存泄漏的文章。