[JVM] 应用诊断工具之Fastthread(在线诊断)

0 序言

  • 背景

近期生产系统遇到了一个线程方面的问题,目前根因已定位到。现将fastthread这一诊断工具做一小结,便于以后快速使用

  • 博主我遇到的线程问题:java.lang.OutOfMemoryError: unable to create new native thread

java.lang.OutOfMemoryError 有 8 种类型。这8种类型中java.lang.OutOfMemoryError: unable to create new native thread 是常见的类型之一。OutOfMemoryError当应用程序无法创建新线程时会生成这种类型。

由于以下两个原因,可能会出现此错误:

  • 内存中没有空间容纳新线程。
  • 线程数超出操作系统限制。
  • FastThread

    • FastThread是一款针对Java线程分析的工具,可以帮助用户分析线程转储文件,查找线程问题,识别性能瓶颈等。
    • https://fastthread.io/
  • 补充说明:

  • 如果你已获取到java应用程序的thread dump文件,其实通过人工分析该文件也能分析出不少问题。

如何人工分析thread dump文件?参见:[JVM] Java Thread Dump 分析 - 博客园/千千寰宇

  • FastThread 只是将thread dump文件的内容进行了统计性质的【数据可视化分析】,这么看你就理解了。

1 操作使用

Step1 上传thread-dump文件,等待解析完成

解析成功后,自动跳转至 Step2的分析页面

https://fastthread.io/ft-thread-report.jsp

Step2 分析页面

  • Thread Dump - Intelligence Report / Thread Count Summary / Total Threads count / Thread Pools /

各个Tab详细看看:

Step2.1 Thread Dump - Intelligence Report(线程Dump - 智能报告) Tab

Step2.2 Total Threads count(总线程数统计) Tab

Step2.3 Thread Pools(线程池) Tab

Step2.4 Daemon vs non-Daemon(守护线程 vs 非守护线程) Tab

Step2.5 Threads with identical stack trace(具有相同堆栈跟踪的线程) Tab

点击【WARN】提示的 their stack trace链接:

Step2.6 Last executed methods(最近执行的方法) Tab

Step2.7 CPU consuming threads(消耗CPU的线程) Tab

Step2.8 Blocking Threads - Transitive Graph(阻塞线程-传递图) Tab

Step2.9 GC Thread(GC线程) Tab

Step2.10 Threads Stack Length(线程栈的长度) Tab

Step2.11 Complex Deadlock(复杂的死锁) Tab

Step2.12 Deadlock(死锁) Tab

Step2.13 Finalizer Thread(终结器线程) Tab

Step2.14 Exception(异常) Tab

Step2.15 Flame Graph(火焰图像) Tab

Step2.16 Bottom up Call Stack Tree(自底向上调用堆栈树) Tab


Step2.17 My Patterns(Βeta)(我的模式(BETA)) Tab

X 参考文献

排除/解决 OutOfMemoryError:无法创建新的本机线程

相关推荐
千千寰宇1 年前
[JDK/APM] 应用诊断工具之VisualVM
软件通用方案-应用性能监测与诊断优化