[JVM] 應用診斷工具之Fastthread(線上診斷)

千千寰宇發表於2023-12-09

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 參考文獻

排除/解決 OutOfMemoryError:無法建立新的本機執行緒

相關文章