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
文件的内容进行了统计性质的【数据可视化分析】,这么看你就理解了。Fastthread
是一个Web在线
分析工具,而非本地离线的分析工具,如果有这方面担忧的,请放弃使用。
绝大多数情况下,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 参考文献
- Fastthread 【推荐】
- Troubleshoot OutOfMemoryError: Unable to Create New Native Thread – Dzone.com 【推荐】
排除/解决 OutOfMemoryError:无法创建新的本机线程
- [JVM] Java Thread Dump 分析 – 博客园/千千寰宇 【推荐】
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net