You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行中的JVM上查看Virtual Threads(虚拟线程)?

虚拟线程监控与调试工具建议

1. JDK自带命令行工具

  • jcmd:JDK 21及以上版本新增了虚拟线程专属命令,无需额外安装工具:
    • 执行 jcmd <进程ID> VirtualThread.list 可列出所有虚拟线程的ID、名称、状态(RUNNABLE/BLOCKED等)及关联的载体线程;
    • 执行 jcmd <进程ID> Thread.print -v 会输出所有线程(含虚拟线程)的完整栈跟踪,虚拟线程会标注VirtualThread标识;
    • 导出线程信息到文件可使用 jcmd <进程ID> Thread.dump_to_file -format=json <输出文件路径>,JSON格式会清晰区分虚拟线程与平台线程。
  • jstack:JDK 21+版本的jstack默认包含虚拟线程栈信息,直接执行jstack <进程ID>即可查看,虚拟线程栈顶部会标注VirtualThread字样。

2. JDK Mission Control (JMC)

开源的性能分析工具,最新版本完全支持虚拟线程监控:

  • 可实时查看虚拟线程总数、状态分布(运行/阻塞/等待);
  • 能追踪虚拟线程生命周期,查看阻塞具体原因(如锁等待、IO阻塞);
  • 提供火焰图、线程快照等功能,方便定位性能瓶颈。

3. IDE调试工具

  • IntelliJ IDEA 2023.1+:调试会话中,调试窗口会单独显示「Virtual Threads」标签,可查看所有活跃虚拟线程的栈帧、状态,支持给虚拟线程设断点,还能单独冻结/解冻目标虚拟线程,适配开发阶段调试需求。
  • Eclipse 2023-03+:同样支持在调试视图中展示虚拟线程,配合JDK 21+调试API,可直接对虚拟线程进行调试操作。

4. VisualVM 最新版

你之前使用的VisualVM在2.1.6及以上版本已支持虚拟线程:

  • 线程面板会自动区分平台线程与虚拟线程,可切换查看;
  • 能查看虚拟线程的栈信息、状态,以及它们关联的载体线程池情况;
  • 支持生成线程快照,对比不同时段的虚拟线程状态变化。

代码层面的辅助调试

若需在代码中临时排查,可利用JDK提供的API:

  • 使用 VirtualThread.current()(JDK21+)获取当前虚拟线程实例,调用getState()查看状态;
  • 通过 Thread.getAllStackTraces() 获取所有线程(含虚拟线程)的栈跟踪,过滤VirtualThread类型条目即可分析;
  • 自定义虚拟线程工厂时,给每个虚拟线程设置明确名称(如Thread.ofVirtual().name("conn-%d", Thread.NAME_PATTERN_SEQUENTIAL).factory()),方便在工具中快速识别不同连接对应的虚拟线程。

内容的提问来源于stack exchange,提问作者chesterbr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:33:40