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

Ash*_*deh 3 .net-core coreclr asp.net-core

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

顶部

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

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

我应该限制虚拟内存吗?如何?

Ash*_*deh 5

我发现最简单的方法是使用createdumpdotnet 运行时附带的实用程序,该实用程序与 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.
Run Code Online (Sandbox Code Playgroud)

在这里阅读有关 createdump 的更多信息


另一种选择是使用 dotnet-dump 全局工具,您可以在此处阅读该工具

在 Linux 上,运行时版本必须为 3.0 或更高版本。在 Windows 上,dotnet-dump Collect 将适用于任何版本的运行时。

因为我运行的是 v2.2,所以我无法使用这个工具。