프로파일링 오류 및 문제 해결

이 문서에서는 Visual Studio의 성능 프로파일러에서 충분한 데이터를 사용하거나 가져오는 것을 방지할 수 있는 가장 일반적인 오류 중 일부에 대한 솔루션을 제공합니다.

결과 없음

오류: "현재 필터 집합에 데이터가 없습니다."

디그세션 파일을 열 때 추적을 더 쉽게 이해할 수 있도록 네이티브 코드 숨기기 또는 비사용자 코드 숨기기와 같은 특정 필터가 적용됩니다. 또한 시간 선택 및 스레드같이 적용할 수 있는 다른 필터가 있으며, 이 필터는 표시된 데이터의 범위를 더욱 좁힐 수 있습니다. 이러한 필터가 다시 표시할 데이터가 없는 방식으로 적용된 경우기본이 경고가 표시됩니다.

수정 방법

  • 시간 선택에 데이터가 있는지 확인합니다. 데이터 위의 그래프에서 시간 선택을 변경한 경우 선택 취소를 선택하여 다시 설정합니다.
  • 다음으로, 데이터가 아직 없는 경우 해당 드롭다운에서 모든 범주와 스레드가 사용하도록 설정되어 있는지 확인합니다.
  • 프로파일링하는 애플리케이션이 네이티브 코드인 경우 설정 드롭다운에서 네이티브 코드 표시 옵션을 사용하도록 설정해야 합니다.
  • 여전히 데이터가 없는 경우 수집한 추적이 너무 짧아서 데이터가 없을 수 있습니다. 데이터를 수집하는 프로그램이 너무 빨리 완료되지 않았는지 확인합니다(1초 미만).

참고 항목: 외부 코드 표시

결과가 완료되는 데 시간이 오래 걸립니다.

컬렉션 후 힙 분석이 로드 속도가 느려 보이는 경우 대기 시간 문제를 해결하는 데 도움이 될 수 있는 다음과 같은 가능한 솔루션을 참조하세요.

경우에 따라 메모리 집약적 애플리케이션에서 스냅샷 분석하려고 할 때 수정하는 방법이 더 오래 걸릴 수 있지만 최신 버전의 Visual Studio로 업그레이드하면 분석 대기 시간이 줄어듭니다. 업그레이드 후 이 문제가 지속되면 도구에 성능 버그가 있을 수 있습니다. 피드백 티켓을 만들고 생성된 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 사용량 다이어그세션 파일을 수집하고 코드를 일부 변경한 다음(이전 PBD를 대체하는) 다시 컴파일한 다음 .diagsession을 다시 열면 업데이트한 코드 모듈에 대한 원본 정보를 볼 수 없습니다.

이 문제에 대한 가장 쉬운 해결 방법은 변경 후 새 디그세션을 수집하는 것입니다. 이렇게 하면 PDB가 최신 상태인지 확인할 수 있습니다.

오류: "내부 오류로 인해 메모리 분석이 실패했습니다."

긴 메모리 프로파일링 세션 후에는 결과를 분석하려는 시도가 오류와 함께 충족됩니다.

메모리 도구에서 캡처한 스냅샷 정보와 컬렉션 에이전트의 정보가 일치하지 않습니다. 이 결과는 메모리 도구가 네이티브 스냅샷 대한 힙 상태 파일을 찾을 수 없음을 의미합니다. 또는 이로 인해 메모리 도구가 스냅샷 GC 시작 시간과 GCStats를 검색하기 위해 diagsession 파일에 등록된 GC 시작 시간과 일치하지 않습니다.

이 문제를 해결하는 방법은 17.3에서 해결된 도구의 버그 때문입니다. 이후 버전으로 업그레이드하면 문제가 해결됩니다. 업그레이드 후에도 문제가 계속 지속되면 피드백 티켓을 만들고 티켓에 첨부합니다.

  • diagsession 파일
  • Visual Studio의 미니덤프
  • 사용된 메모리 스냅샷 스크린샷.

이 문제에 대한 해결 방법은 없으며 프로파일링 세션을 다시 시작해야 합니다.

오류: "X 진단 이벤트가 삭제되었습니다. 보고서의 일부 정보가 누락되었거나 부정확할 수 있습니다."

경우에 따라 데이터 캡처 중에 결과 프로파일링 보고서가 부정확하거나 사용할 수 없게 될 수 있는 이벤트를 삭제할 수 있습니다. 삭제된 이벤트는 여러 가지 이유로 발생할 수 있지만, 주로 시스템에서 들어오는 속도보다 빠르게 디스크로 이벤트를 플러시할 수 없는 경우에 발생합니다.

삭제된 이벤트를 줄이기 위해 문제를 해결하는 방법은 프로파일링하는 동안 다른 디스크 및 CPU 집약적 작업을 닫을 수 있습니다. 이러한 작업을 닫으면 시스템은 들어오는 이벤트를 플러시하는 데 더 많은 리소스를 사용할 수 있습니다. CPU 사용량 도구 및 .NET 할당 도구와 같은 이러한 구성 설정을 지원하는 도구에서 샘플링 빈도를 줄여 오버헤드를 줄일 수도 있습니다.

오류: ETW 리소스가 소진되었습니다.

Visual Studio 프로파일러가 ETW(Windows용 이벤트 추적)를 사용하여 성능 정보를 수집합니다. 시스템에서 사용할 수 있는 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개).

오류: ARM64 VM에서 CPU 사용량 도구가 작동하지 않음

Visual Studio 프로파일러가 ETW(Windows용 이벤트 추적)를 사용하여 성능 정보를 수집합니다. 현재 VM(Virtual Machine)에서 실행할 때 ETW를 사용하여 프로필 샘플을 수집하는 것은 ARM64용 Windows에서 지원되지 않습니다. 이 제한을 해결하려면 실제 ARM64 디바이스에서 CPU 사용량 도구를 사용하거나 계측 도구를 사용하여 타이밍 정보를 캡처할 수 있습니다.

오류: 서버 GC를 사용하도록 설정된 .NET 7 및 .NET 런타임 8.0.0-8.0.1에서 메모리 사용량 도구가 작동하지 않음

.NET 7 런타임에 도입되고 .NET 8 런타임 버전 8.0.0 및 8.0.1로 전파되는 문제로 인해 서버 가비지 수집을 사용할 때 개체를 열거할 수 없습니다. 서버 가비지 수집은 ASP.NET Core 애플리케이션에 대해 기본적으로 사용하도록 설정됩니다.

수정 방법

이 문제를 해결하려면

  • 스냅샷 사용하거나 애플리케이션의 덤프를 수집할 때 서버 가비지 수집을 사용하지 않도록 설정합니다.
  • 영향을 받지 않는 버전의 .NET 런타임을 사용합니다.

참고 항목: