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
檔案,等待解析完成
解析成功後,自動跳轉至 Step2的分析頁面
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:無法建立新的本機執行緒