Как создать файл дампа памяти разумного размера процесса .NET Core в Linux? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь сгенерировать дамп ядра разумного размера работающего процесса ядра .net, используя gcore, но размер файла превышает 20 ГБ. Процесс dotnet wapi.dll - это двоичный файл пустого проекта, созданного с использованием dotnet new webapi. Я думаю, что размер дампа связан с количеством виртуальной памяти.

htop

Основной вопрос - как мне создать меньший дамп ядра?

Это связано с тем, о чем я думаю (виртуальная память)?

Стоит ли ограничивать виртуальную память? как?

Ответы [ 2 ]

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

Я обнаружил, что самый простой способ сделать это - использовать утилиту createdump, которая поставляется со средой выполнения dotnet и находится в том же каталоге, что и libcoreclr.so. ( благодаря Маони Стивенс ).

Использование createdump довольно просто:

createdump [options] pid
-f, --name - dump path and file name. The pid can be placed in the name with %d. The default is "/tmp/coredump.%d"
-n, --normal - create minidump (default).
-h, --withheap - create minidump with heap.
-t, --triage - create triage minidump.
-u, --full - create full core dump.
-d, --diag - enable diagnostic messages.

Подробнее о созданном здесь можно узнать


Другой вариант - использовать dotnet-dump global tool, о котором вы можете прочитать об этом здесь .

В Linux версия времени выполнения должна быть 3.0 или выше. В Windows dotnet-dump collect будет работать с любой версией среды выполнения.

Поскольку я использовал v2.2, я не смог использовать этот инструмент.

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

Вы пробовали dotnet-dump и друзей? Они поддерживают mini дампов, которые меньше и могут быть достаточны для того, что вам нужно:

$ dotnet tool install -g dotnet-dump
You can invoke the tool using the following command: dotnet-dump
Tool 'dotnet-dump' (version '3.0.47001') was successfully installed.
$ dotnet dump collect --help
collect:
  Capture dumps from a process

Usage:
  dotnet-dump collect [options]

Options:
  --type <Heap|Mini>  The dump type determines the kinds of information that are collected from the process. There are two types: heap - A large and relatively comprehensive dump containing module lists, thread lists, all
                      stacks, exception information, handle information, and all memory except for mapped images. mini - A small dump containing module lists, thread lists, exception information and all stacks. If not
                      specified 'heap' is the default.
...