1. 程式人生 > 實用技巧 >【應用服務 App Service】快速獲取DUMP檔案(App Service for Windows(.NET/.NET Core))

【應用服務 App Service】快速獲取DUMP檔案(App Service for Windows(.NET/.NET Core))

問題情形

當應用在Azure 應用服務App Service中執行時,有時候出現CPU,Memory很高,但是沒有明顯的5XX錯誤和異常日誌,有時就是有異常但是也不能明確的指出具體的程式碼錯誤。當面臨這樣的情形是,有效的排查辦法就是在問題重現的時候抓取DUMP檔案,可以通過DUMP檔案分析出是否有執行緒死鎖,或檢視時那些請求導致的死鎖問題。也可以定位到相關的自定義程式碼類檔案。非常助於下一步的查詢問題。

抓取DUMP檔案

1) 利用App Service自帶Kudu的工具獲取DUMP檔案

  • 登入進當前應用服務的kudu站點,入口URL為:https://<yoursitename>.scm.chinacloudsites.cn/
  • 選擇Process Explorer找到您需要抓取的程序,如w3wp.exe
  • 右鍵[Full Dump]即可,抓取後DUMP檔案會自動下載到本地。

2) 對於.NET/.NET Core應用,使用procdump命令抓取指定的程序DUMP檔案

  • 登入Kudu站點, 入口URL為:https://<yoursitename>.scm.chinacloudsites.cn/
  • 在Process Explorer中找到需要抓取的程序號,如 10524
  • 回到DebugConsole頁,使用如下procdump命令,抓取5秒鐘,抓取三次。
D:\home\LogFiles>D:\devtools\sysinternals\procdump -accepteula -ma 10524
(PID) -s 5 -n 3

執行結果如:

Kudu Remote Execution Console
Type 'exit' then hit 'enter' to get a new CMD process.
Type 'cls' to clear the console

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

D:\home>D:\devtools\sysinternals\procdump -accepteula -ma 7040   -s 5 -n 3

ProcDump v9.
0 - Sysinternals process dump utility Copyright (C) 2009-2017 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com Process: dotnet.exe (7040) Process image: D:\Program Files (x86)\dotnet\dotnet.exe CPU threshold: n/a Performance counter: n/a Commit threshold: n/a Threshold seconds: 5 Hung window check: Disabled Log debug strings: Disabled Exception monitor: Disabled Exception filter: [Includes] * [Excludes] Terminate monitor: Disabled Cloning type: Disabled Concurrent limit: n/a Avoid outage: n/a Number of dumps: 3 Dump folder: D:\home\ Dump filename/mask: PROCESSNAME_YYMMDD_HHMMSS Queue to WER: Disabled Kill after dump: Disabled Press Ctrl-C to end monitoring without terminating the process. [13:47:38] Timed: [13:47:38] Dump 1 initiated: D:\home\dotnet.exe_200827_134738.dmp [13:47:47] Dump 1 writing: Estimated dump file size is 199 MB. [13:47:54] Dump 1 complete: 199 MB written in 16.6 seconds [13:48:00] Timed: [13:48:00] Dump 2 initiated: D:\home\dotnet.exe_200827_134800.dmp [13:48:08] Dump 2 writing: Estimated dump file size is 199 MB. [13:48:13] Dump 2 complete: 199 MB written in 12.8 seconds [13:48:19] Timed: [13:48:19] Dump 3 initiated: D:\home\dotnet.exe_200827_134819.dmp [13:48:26] Dump 3 writing: Estimated dump file size is 200 MB. [13:48:30] Dump 3 complete: 200 MB written in 11.2 seconds [13:48:31] Dump count reached. D:\home>

3) 對於JAVA的站點,則需要在包含JSTACK 或JMAP的JDK版本中抓取,如對於應用執行環境中沒有,則需要先修改java container的版本。如:zulu8.17.0.3-jdk8.0.102-win_x64

  • 登入Kudu站點, 入口URL為:https://<yoursitename>.scm.chinacloudsites.cn/
  • 在Process Explorer中找到需要抓取的程序號,如5252
  • 回到DebugConsole頁,使用如下jstack / jmap,抓取5252的dump檔案,並儲存在threaddump1檔案中
"D:\Program Files\Java\zulu8.17.0.3-jdk8.0.102-win_x64\bin"\jstack -F 5252 >D:/home/site/threaddump1.txt

"D:\Program Files\Java\zulu8.17.0.3-jdk8.0.102-win_x64\bin"\jmap -F -J-d64 -heap 5252> D:/home/site/threaddump1.txt

如何分析DUMP檔案

可以先使用DebugDiag對檔案進行初步的分析,它已整合一些內建的規則,所以無需編寫windbg命令,當分析完成之後,會生成分析報告。在報告中,可以知道當前執行緒的情況,異常情況,及trace stack。

如果需要更多的分析,則需要考慮使用windbg工具,這需要複雜的命令及對dump的分析有非常深厚的要求。

DebugDiag下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=58210

Windbg下載地址:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools