如何在Linux上生成大小合理的.NET Core进程的内存转储文件?

时间:2019-10-03 06:00:59

标签: asp.net-core .net-core coreclr

我正在尝试使用gcore生成一个正在运行的.net核心进程的合理大小的核心转储,但该文件大于20GB。 进程为dotnet wapi.dll,它是使用dotnet new webapi创建的空项目的二进制文件。 我认为转储的大小与虚拟内存量有关。

htop

主要问题是如何生成较小的核心转储?

这与我在想的(虚拟内存)有关吗?

我应该限制虚拟内存吗?怎么样?

2 个答案:

答案 0 :(得分:1)

您是否尝试过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.

答案 1 :(得分:1)

我发现最简单的方法是使用createdump实用程序,该实用程序是dotnet运行时附带的,并且与libcoreclr.so位于同一目录中。 (thanks to Maoni Stephens)。

使用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.

Read more about createdump here


另一种选择是使用you can read about it here的dotnet-dump全局工具。

  

在Linux上,运行时版本必须为3.0或更高。在Windows上,   dotnet-dump collect可以与任何版本的运行时一起使用。

因为我正在运行v2.2,所以无法使用此工具。