После обновления моего ранее очень стабильного приложения do tnet core с 2.0 до 3.1 оно начало испытывать утечку памяти. Я пытаюсь получить дамп ядра, чтобы проанализировать, что использует всю память, но я столкнулся с несколькими камнями преткновения, пытаясь это сделать.
Мое приложение работает в контейнере docker на основе mcr.microsoft.com/dotnet/core/sdk:3.1 для сборки и mcr.microsoft.com / dotnet / core / as pnet: 3.1-bioni c для времени выполнения.
Для отладки я использую mcr.microsoft.com / dotnet / core / sdk: 3.1-bioni c, а затем устанавливаю необходимые инструменты:
dotnet tool install -g dotnet-dump
dotnet tool install -g dotnet-counters
dotnet tool install -g dotnet-trace
Когда я пытаюсь запустить do tnet -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
Это может быть сама трассировка, а не мое приложение? pid, о котором сообщает ps aux, равен 1 (я предполагаю, что это docker вещь):
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
Если я попытаюсь сделать дамп ядра через do tnet core dump collect -p 1 Я получаю следующее:
Process 1 not running compatible .NET Core runtime.
Вот результат команды do tnet --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, поэтому я не могу понять, почему там возникла проблема.