我正在尝试使用gcore
生成一个正在运行的.net核心进程的合理大小的核心转储,但该文件大于20GB。
进程为dotnet wapi.dll
,它是使用dotnet new webapi
创建的空项目的二进制文件。
我认为转储的大小与虚拟内存量有关。
主要问题是如何生成较小的核心转储?
这与我在想的(虚拟内存)有关吗?
我应该限制虚拟内存吗?怎么样?
答案 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,所以无法使用此工具。