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

标签 java performance java-threads thread-dump

我的 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 内存泄漏的文章。

关于java - 为什么 VM 线程会减慢我的 Web 应用程序的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55914242/

相关文章:

java - 我如何使用正则表达式提取它

android - 不建议使用带底部导航的 Activity 吗

python - 检查字符串的任何(所有)字符是否在给定范围内

performance - CALayer性能问题: animating a line anchored between two UIViews

java - Neo4j Spring Data 映射到 Java API stackoverflow

java - 从 TextView 中进行字符串标记

java - 如何在一定时间后继续 for 循环而不使用 `try ... catch` 方法?

java - 多个线程在java中使用同一个对象是否复制它?

java - 将工作线程与主线程一起使用会减少基于 Java 的智能设备的响应延迟或增加工作负载吗?

java - com.microsoft.sqlserver.jdbc.SQLServerException : The value is not set for the parameter number 1