Как правильно исследовать утечки памяти в контейнере .net core linux kubernetes? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть приложение .net core, работающее в док-контейнере Linux, и во время получения дампов (ядро 2.2 или 3.0) я не могу открыть их в PerfView,

принимает дампы согласно этой инструкции: https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-dump-instructions.md

PerfView показывает эту ошибку в журналах:

Creating heap dump C:\temp\dumps\dump\dump-1.gcdump from process dump C:\temp\dumps\dump\dump-1.dmp.
HeapDump Error: Microsoft.Diagnostics.Runtime.ClrDiagnosticsException: Could not load crash dump 'C:\temp\dumps\dump\dump-1.dmp', HRESULT: 0x80070057
   at Microsoft.Diagnostics.Runtime.DbgEngDataReader..ctor(String dumpFile)
   at Microsoft.Diagnostics.Runtime.DataTarget.LoadCrashDump(String fileName)
   at GCHeapDumper.InitializeClrRuntime(String processDumpFile, DataTarget& target, ClrRuntime& runtime)
   at GCHeapDumper.DumpHeapFromProcessDump(String processDumpFile)
   at Program.MainWorker(String[] args)

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Файл дампа создается внутри контейнера и поэтому не доступен напрямую с вашего компьютера. (Если вы используете Windows и Docker для Windows, между ними есть даже виртуальная машина.)

Что вам нужно сделать, это скопировать тупой файл из контейнера на ваш хост и открыть его впоследствии. Это может быть достигнуто с помощью команды docker cp, например: docker cp <container name>:<path in container>dump-1.gcdump C:\temp\dumps\dump\dump-1.gcdump

0 голосов
/ 22 октября 2019

Полагаю, вам нужно использовать отладчик Linux для открытия дампов Linux. Afaik PerfView поддерживает только дамп Windows.

Команда CoreClr предоставляет расширение отладчика SOS, которое можно использовать из отладчика lldb. https://github.com/dotnet/coreclr/blob/master/Documentation/building/debugging-instructions.md

...