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

0 序言

  • 背景

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

  • 博主我遇到的线程问题: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文件的内容进行了统计性质的【数据可视化分析】,这么看你就理解了。
  • Fastthread是一个Web在线分析工具,而非本地离线的分析工具,如果有这方面担忧的,请放弃使用。
    绝大多数情况下,thread dump也不会泄露什么机密。里面全都是堆栈信息,你自己打开细看便知~

1 操作使用

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

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

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

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

Step2 分析页面

  • Thread Dump - Intelligence Report / Thread Count Summary / Total Threads count / Thread Pools /
    [JVM]  应用诊断工具之Fastthread(在线诊断)

各个Tab详细看看:

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

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

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

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

Step2.3 Thread Pools(线程池) Tab

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

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

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

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

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

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

点击【WARN】提示的 their stack trace链接:
[JVM]  应用诊断工具之Fastthread(在线诊断)

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

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

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

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

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

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

Step2.9 GC Thread(GC线程) Tab

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

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

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

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

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

Step2.12 Deadlock(死锁) Tab

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

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

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

Step2.14 Exception(异常) Tab

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

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

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

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

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

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

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

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

X 参考文献

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

发表评论

评论已关闭。

相关文章