dotnet-dump - Access is denied

ASP.NET Core 6.0으로 개발되어서 서버에 윈도우 서비스로 동작되는 프로그램이 있습니다. 메모리 누수가 있어서 몇일만 지나면 사용중인 메모리가 몇십기가가 되어 버립니다.
메모리 누수의 원인을 찾기위해 서버에서 아래와 같이 실행했습니다.

dotnet-dump collect -p <pid>

그러나 아래와 같이 오류가 발생합니다.

Invalid process id <pid> - Access is denied. (5)

관리자 권한으로 실행해도 마찬가지로 오류가 발생합니다.
대상 프로그램은 윈도우 서비스로 실행되고 있어서 권한 오류가 발생하는것 같습니다.

윈도우 서비스로 실행 중인 프로그램을 dotnet-dump로 덤프를 생성하려면 어떻게 해야 할까요?
아니면 dotnet-dump 말고 메모리 누수의 원인을 찾기위한 더 좋은 방법이 있을까요?
(대상 시스템은 운영서버라서 개발툴을 설치할 수 없으며, 로컬에서는 재현이 많이 까다로와서 운영서버에서 원인 분석을 하고 싶습니다.)

동일한 증상으로 보이는 오류가 보고되어 있는 것 같습니다.

DEL /S %TEMP%\system-commandline-sentinel-files

위 명령으로 항목을 삭제한 뒤 재실행 하보세요.

저도 이거 찾아보고 그대로 했는데도 안되더라고요.
감사합니다.

작업 관리자로 덤프 해보세요. 어차피 dotnet-dump는 윈도우의 경우 Windows에서 제공하는 MiniDumpWriteDump API를 호출합니다. (참고: 닷넷: 2290. C# - 간이 dotnet-dump 프로그램 만들기 (sysnet.pe.kr))

1개의 좋아요

Debug Diagnostic Tool를 사용해보시는건 어떤가요?
MS에서 지원받을떄는 해당 툴로 지원을 받고는 했었습니다~~
분석및 풀덤프가 가능 합니다.

감사합니다.
그런데 작업 관리자로 덤프하니까 덤프하는동안 프로세스가 일시 정지되네요.
메모리 누수로 프로세스의 메모리 사용량이 매우 크다보니 덤프를 위해 일시 정지되는 시간도 매우 오래 걸립니다.
어쨌든 dotnet-dump 처럼 덤프는 잘 생성됩니다.
(프로세스 일시 정지 없이 덤프가 생성되면 좋을 것 같은데요.)

1개의 좋아요

감사합니다.
해당 툴로 덤프해봤는데, dotnet-dump 만큼 닷넷에 대해 상세한 분석은 안되는것 같습니다.
특히 DotNetMemoryAnalysis 항목은 Failed로 표시됩니다.
(제가 툴을 제대로 사용하지 못하기 때문일 수 있습니다.)

1개의 좋아요

이미 언급한 대로, dotnet-dump도 윈도우 버전은 MiniDump… API를 사용하기 때문에 일시 정지되는 것은 동일합니다.

단지, 그게 크게 느껴지는 이유는 메모리 사용량이 크기 때문입니다. (그에 비례해서 디스크 쓰기 시간도 걸리고.)

설령, MiniDump… API를 쓰지 않는다고 해도 덤프하는 동안은, 즉, GC Heap을 전부 디스크에 쓰는 동안은 사용해서는 안 되므로 어차피 .NET 런타임이 멈춰야 하는 것은 동일합니다. 결국 프로세스가 일시 정지하는 것과 별반 다르지 않습니다.

1개의 좋아요

네. 이해했습니다.
도움주셔서 감사합니다.