疑難排解分析錯誤並修正問題

本文提供一些最常見的錯誤解決方案,這些錯誤可能會阻止在 Visual Studio 中使用效能分析工具或從效能分析工具取得足夠的資料。

搜尋支援

錯誤:「目前的篩選集合中沒有任何資料」

開啟 diagsession 檔案時,會套用某些篩選,例如隱藏機器碼,或隱藏非使用者程式碼,讓追蹤更容易了解。 此外,還可以套用其他篩選,例如 [時間選取範圍] 和 [執行緒],以進一步縮小顯示的資料範圍。 如果套用這些篩選的方式導致沒有剩餘的資料顯示,則您會看到此警告。

修正方法

  • 請確定您的時間選取範圍中有資料。 如果您已變更資料上方圖表中的時間選取範圍,請選取 [清除選取範圍] 進行重設。
  • 接下來,如果仍然沒有資料,請確定在其各自的下拉式清單中啟用所有類別和執行緒。
  • 如果您要分析的應用程式是機器碼,請務必在 [設定] 下拉式清單中啟用 [顯示機器碼] 選項。
  • 如果您仍然沒有資料,則您收集的追蹤可能太短,無法顯示任何資料。 請確定您為其收集資料的程式不會太快完成 (不到一秒)。

另請參閱:顯示外部程式碼

結果需要很長的時間才能完成

如果在收集後分析堆疊的載入速度似乎很慢,請參閱以下可能的解決方案,以協助解決等待時間問題。

修正方法 有時嘗試分析高記憶體用量應用程式的快照集需要較長的時間,但升級至較新版本的 Visual Studio 應可減少分析等候時間。 如果此問題在升級之後持續發生,表示工具可能發生效能錯誤。 請建立意見反應票證,並分享已建立的 diagsession 檔案。 透過檔案,我們可以判斷資料分析速度緩慢的原因,並找出我們可以改善效能的地方。

請務必在意見反應票證中提供追蹤和堆積傾印檔案。

請參閱:

[無法為此 diagsession 建立資訊清單檔] 錯誤或 [無法建立 diagsession 資訊清單檔] 錯誤,Visual Studio 將無法重新開啟此工作階段。

此問題表示在停止收集資料之後,準備要分析並顯示記憶體快照集資料時發生問題。 問題出現的原因有很多,從無法從集合代理程式取得正確的資訊到實際資料處理程序都有可能。 因此,如果沒有進一步記錄將無法診斷問題。

修正方法 使用其他記錄資訊回覆您的意見反應票證,以便我們可以診斷問題。 您可以從提高權限的命令提示字元中執行下列命令以取得記錄資訊:

reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogLevel /t REG_SZ /d All /reg:32
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogDirectory /t REG_SZ /d [directory of your choice] /reg:32

執行這些命令之後,請啟動 Visual Studio、重現您的案例、關閉 Visual Studio、然後壓縮您選擇的 DiagnosticsHub 記錄目錄,並將其附加至此票證。 從那時起,我們應該能夠更精準地診斷所發生的情況。

將記錄新增至您的票證之後,請執行下列命令來停用記錄:

reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogLevel /reg:32
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogDirectory /reg:32

錯誤:「無法使用來源資訊。」

若要檢視來源資訊,在收集開始時必須有 PDB。 因此,例如,如果您要收集 CPU 使用量 diagsession 檔案,請變更程式碼、重新編譯 (取代舊的 PBD),然後再次開啟 .diagsession,您可能無法看到已更新程式碼模組的來源資訊。

修正方法 此問題最簡單的因應措施是在進行變更之後收集新的 diagsession。 如此一來,您就可以確定 PDB 是最新的。

錯誤:「因為發生內部錯誤,所以記憶體分析失敗」。

在長時間的記憶體分析工作階段之後,任何嘗試分析結果都會遇到錯誤。

記憶體工具所擷取的快照集資訊與收集代理程式所擷取的快照集資訊不符。 此結果表示記憶體工具找不到原生快照集的堆積狀態檔案。 或者,此結果表示記憶體工具無法比對快照集的 GC 開始時間與 diagsession 檔案中註冊的 GC 開始時間,以擷取 GCStats。

修正方法 此問題是因為工具中的錯誤所導致,但已在 17.3 修正。 升級至更新版本應該可以解決此問題。 如果升級之後問題仍持續發生,請建立意見反應票證並附加至票證:

  • diagsession 檔案
  • Visual Studio 的小型傾印
  • 所擷取之記憶體快照集的螢幕擷取畫面。

此問題沒有任何因應措施,而且必須重新啟動分析工作階段。

錯誤:「已卸除 X 個診斷事件,報告中的部分資訊可能遺漏或不正確」

有時候在資料擷取期間可能會卸除事件,導致結果分析報告不正確或無法使用。 發生卸除事件的原因有很多,但主要發生在系統無法比傳入速率更快地將事件排清到磁碟時。

修正方法 為了協助減少已卸除的事件,您可以在分析時關閉其他需要大量磁碟和 CPU 的作業。 藉由關閉這些作業,系統就可以將更多資源專用給排清傳入事件。 您也可以嘗試減少支援這些組態設定的工具上的取樣頻率,例如 CPU 使用量工具和 .NET 配置工具,進而降低額外負荷。

錯誤:ETW 資源已耗盡

Visual Studio 分析工具會使用 Windows 事件追蹤 (ETW) 來收集其效能資訊。 系統上可供使用的 ETW 工作階段數量有限,如果所有工作階段都已在使用中,您會收到以下錯誤:ETW resources have been exhausted。 其他程式會使用這些工作階段,例如 SysInternals 工具套件、其他分析工具和其他診斷工具。 您可以藉由下列其中一項來解決此問題:

  • 關閉使用工作階段的程式以釋放資源,或

  • 從提高權限的命令提示字元執行下列命令,然後重新開機,以保留更多資源:

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI" /v EtwMaxLoggers /t REG_DWORD /d 128
    

    執行此命令會將預設工作階段數目從 64 增加到 128 (256 是系統允許的工作階段數目上限)。

錯誤:CPU 使用量工具無法在 ARM64 VM 上運作

Visual Studio 分析工具會使用 Windows 事件追蹤 (ETW) 來收集其效能資訊。 目前,在虛擬機器 (VM) 中執行時,Windows for ARM64 不支援使用 ETW 收集設定檔範例。 若要解決這項限制,您可以在實際的 ARM64 裝置上使用 CPU 使用量工具,或使用偵查工具來擷取計時資訊。

錯誤:記憶體使用量工具無法在啟用伺服器 GC 的 .NET 7 和 .NET Runtime 8.0.0-8.0.1 上運作

由於 .NET 7 執行階段引入並傳播到 .NET 8 執行階段版本 8.0.0 和 8.0.1 的問題,因此在使用伺服器記憶體回收時無法列舉物件。 ASP.NET Core 應用程式預設啟用伺服器記憶體回收。

修正方法

若要解決這個問題:

  • 建立快照或收集應用程式傾印時停用伺服器記憶體回收。
  • 使用不受影響的 .NET 執行階段版本。

另請參閱: