3.1 Docker 컨테이너에서 dotnet 덤프를 실행할 수 없음- "호환되는 .NET Core 런타임을 실행하지 않는 프로세스 1"

Matthewrk

이전에 매우 안정적인 dotnet 코어 앱을 2.0에서 3.1로 업그레이드 한 후 메모리 누수가 발생하기 시작했습니다. 나는 모든 메모리를 사용하는 것을 분석하기 위해 코어 덤프를 잡으려고 노력하고 있지만 그렇게하려고 시도하는 여러 걸림돌에 부딪 혔습니다.

내 앱은 빌드 mcr.microsoft.com/dotnet/core/sdk:3.1 및 런타임 용 mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic기반으로하는 도커 컨테이너 에서 실행됩니다.

디버그 목적으로 mcr.microsoft.com/dotnet/core/sdk:3.1-bionic사용 하고 필요한 도구를 설치합니다.

dotnet tool install -g dotnet-dump
dotnet tool install -g dotnet-counters
dotnet tool install -g dotnet-trace

dotnet-trace를 실행하여 pid를 잡으려고하면 매번 다른 pid를 반환합니다.

root@499333cca890:/app# dotnet trace ps
      1290 dotnet     /usr/share/dotnet/dotnet

root@499333cca890:/app# dotnet trace ps
      1311 dotnet     /usr/share/dotnet/dotnet

root@499333cca890:/app# dotnet trace ps
      1332 dotnet     /usr/share/dotnet/dotnet

추적 자체가 될 수 있으며 내 앱을 선택하지 않습니까? ps aux에 의해보고 된 pid는 1입니다 (나는 이것이 도커 일이라고 가정합니다) :

root@499333cca890:/app# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.4  7.7 21890008 158932 ?     Ssl  05:52   1:14 dotnet MyApp.dll

dotnet core dump collect -p 1을 통해 코어 덤프를 얻으려고하면 다음과 같은 결과가 나타납니다.

Process 1 not running compatible .NET Core runtime.

dotnet --info의 출력은 다음과 같습니다.

.NET Core SDK (reflecting any global.json):
 Version:   3.1.302
 Commit:    41faccf259

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64
 Base Path:   /usr/share/dotnet/sdk/3.1.302/

Host (useful for support):
  Version: 3.1.6
  Commit:  3acd9b0cd1

.NET Core SDKs installed:
  3.1.302 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.6 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

내 csproj의 대상 프레임 워크는 다음과 같습니다.

<TargetFramework>netcoreapp3.1</TargetFramework>

로컬에서 macos를 docker 호스트로 실행하고 권한을 설정하고 SYS_PTRACE를 활성화합니다.

 docker run -d --privileged --cap-add SYS_PTRACE [...]

이러한 옵션은 저의 마지막 발견이었고 해결책이 될 것이라고 생각했지만 여전히 운이 없었습니다. 나는 내가 놓친 라인을 따라 다른 것을 가정하고 있습니까? 그 외에는 최신 3.1 sdk에서 실행되는 3.1 앱이므로 왜 문제가 있는지 알 수 없습니다.

Matthewrk

동일한 동작을 표시하지 않는 새로운 dotnet 웹 앱 프로젝트와 내 앱을 한 줄씩 비교하여 Program.cs Main () 메서드에서이 줄의 원인을 찾았습니다.

CreateHostBuilder(args).Start()

이를 다음으로 변경하면 진단 액세스 문제와 내가 겪었던 메모리 문제가 해결됩니다.

CreateHostBuilder(args).Build().Run()

이것은 새로운 dotnet 핵심 웹 앱 프로젝트의 기본값이므로 .Start ()를 어디에서 사용했는지 확실하지 않습니다. 차이점은 Run이 비동기식이고 Start는 궁극적으로 동일한 메서드를 호출하지만 비동기 작업을 기다리므로 다른 작업을 차단할 수 있다고 가정합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관