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(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
解析成功后,自动跳转至 Step2的分析页面
Step2 分析页面
- Thread Dump - Intelligence Report / Thread Count Summary / Total Threads count / Thread Pools /
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
各个
Tab详细看看:
Step2.1 Thread Dump - Intelligence Report(线程Dump - 智能报告) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.2 Total Threads count(总线程数统计) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.3 Thread Pools(线程池) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.4 Daemon vs non-Daemon(守护线程 vs 非守护线程) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.5 Threads with identical stack trace(具有相同堆栈跟踪的线程) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
点击【WARN】提示的
their stack trace链接:
Step2.6 Last executed methods(最近执行的方法) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.7 CPU consuming threads(消耗CPU的线程) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.8 Blocking Threads - Transitive Graph(阻塞线程-传递图) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.9 GC Thread(GC线程) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.10 Threads Stack Length(线程栈的长度) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.11 Complex Deadlock(复杂的死锁) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.12 Deadlock(死锁) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.13 Finalizer Thread(终结器线程) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.14 Exception(异常) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.15 Flame Graph(火焰图像) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.16 Bottom up Call Stack Tree(自底向上调用堆栈树) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/uploads/2023/12/20231210_657548dee7a06.png)
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
Step2.17 My Patterns(Βeta)(我的模式(BETA)) Tab
![[JVM] 应用诊断工具之Fastthread(在线诊断)](http://www.itfaba.com/wp-content/themes/kemi/images/loading.gif)
X 参考文献
排除/解决 OutOfMemoryError:无法创建新的本机线程