关于jvm 中vmthread的问题

本文讨论了在并发环境中,短时间内大量对象生成导致的CPU占用问题及解决方法,包括JVM VMthread问题、Heap内存泄漏等。通过优化代码减少对象创建,实现性能提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一个同事性能测试,20个并发,压了3分钟,tps急剧下降,jvm开始不响应

通过排查发现,此时old区已满,并且cpu 100%完全被vmthread占用

如果此时停止施压,那么过几分钟,jvm会回复。

也就是说垃圾回收停滞了。

通过MAT查看heap dump发现,有20多万的hibernate session 产生了超过1G的hashmap
无法回收

也就是在并发的情况,如果短时间产生大量的对象,会导致jvm vmthread出问题

于是采用缓存,减少直接的hibernate调用,症状消失


这使我又联想到之前的一个问题

同事的项目刚上线就出了问题,排查下来看到一个task(一个mq消费进程)一启动就cpu 100%

然后task完全不消费,进程停滞

于是通过jstack看到 vmthread 占用了 100% cpu

于是通过jstat 查看垃圾回收时发现heap占用100%

于是检查代码发现,由于多线程的原因,导致并发了加载了字典多次,导致heap 瞬间产生了
很多对象,导致vm thread工作不正常

修改程序确保只加载一次字典,症状消失

总体来说

cpu 100% 通常的思路是查看runnable的线程,但如果发现是耗尽cpu的是vmthread

多半会伴随old区已满(此时垃圾回收已停止),通常这是由于在并发下短时间内创建很多对象造成。


### IntelliJ IDEA 内置的 JVM 分析工具 #### 工具概述 IntelliJ IDEA 集成了多个用于监控和优化 Java 应用程序性能的强大工具。这些内置工具可以帮助开发者识别应用程序中的瓶颈,从而改进应用的整体性能[^3]。 #### 性能分析器 (Profiler) IntelliJ IDEA 自带了一个基于 JMH(Java Microbenchmark Harness)框架的简单性能分析器。此工具允许用户测量特定代码片段的执行时间,并提供详细的统计报告来帮助理解哪些部分消耗了最多的时间资源[^4]。 对于更深入的应用程序性能剖析,JetBrains 推荐使用第三方专业级产品如 YourKit 或者 VisualVM 这样的开源解决方案;不过,在某些版本中,IntelliJ IDEA Ultimate Edition 可以直接集成本地支持的外部 profilers 如 Async Profiler 和 Java Flight Recorder(JFR)[^2]。 #### 调试器(Debugger) 虽然严格来说不是专门针对 JVM 的分析工具,但是调试器提供了非常有用的实时数据视图,包括变量状态、线程堆栈跟踪以及内存分配情况等重要信息。这有助于快速定位潜在问题所在的位置并加以修复[^1]。 #### 日志查看(Log Viewer) 日志文件是排查生产环境中遇到的问题不可或缺的一部分。通过集成的日志查看功能,可以直接在 IDE 内部浏览来自不同来源的日志条目,并且能够方便地过滤感兴趣的内容以便进一步调查可能存在的异常状况。 #### GC 观察(Garbage Collection Watcher) 垃圾回收机制对 JVM 来说至关重要,因为它负责自动管理和释放不再使用的对象所占用的空间。IntelliJ IDEA 支持监视正在运行的应用程序上的GC事件,使开发人员可以轻松观察到每次发生GC时的具体细节,比如暂停时间和频率等指标变化趋势图表展示形式呈现给使用者参考调整参数设置达到最优效果。 ```java // 启动带有GC日志记录选项的应用程序实例 public class Main { public static void main(String[] args) throws Exception{ System.setProperty("java.util.logging.config.file", "logging.properties"); // 添加必要的 VM 参数以启用 GC 日志输出 String vmOptions = "-XX:+PrintGCDetails -Xloggc:/path/to/gc.log"; ProcessBuilder pb = new ProcessBuilder("java", vmOptions, "-jar", "/path/to/your-app.jar"); pb.inheritIO(); Process process = pb.start(); Thread.sleep(60 * 1000); // 让进程保持一段时间 process.destroy(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值