ubuntu dotnet-dump失败,并显示“写入转储失败(HRESULT:0x 80004005)“的代码

0ejtzxu1  于 2022-11-22  发布在  其他
关注(0)|答案(3)|浏览(322)

尽管我在根目录下运行dotnet-dump,并且进程在根目录下运行(见下面的服务描述),但我似乎缺少一些权限。我还尝试了home、var和tmp中的其他目录:都是同样的信息。

root@DSK06511:/home/monouser# dotnet-dump collect -p 10131 --diag -o /var/tmp/MyNodeDump/
Writing full to /var/tmp/MyNodeDump/
Writing dump failed (HRESULT: 0x80004005)

root@DSK06511:/tmp# dotnet-dump collect -p 10131 --diag -o /home/monorepo/tmp/
Writing full to /home/monouser/tmp/
Writing dump failed (HRESULT: 0x80004005)

服务档案:

root@DSK06511:/home/monouser# cat  /etc/systemd/system/MyNode.service
[Unit]
Description=MyNode

[Service]
Type=simple

User=root
Group=root

ExecStart=/home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console

[Install]
WantedBy=multi-user.target

诊断信息:网络转储--版本3.1.120604

dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.1.201
 Commit:    b1768b4ae7

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64
 Base Path:   /usr/share/dotnet/sdk/3.1.201/

Host (useful for support):
  Version: 3.1.3
  Commit:  4a9f85e9f8

.NET Core SDKs installed:
  3.1.201 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.3 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

操作系统版本名称=“Ubuntu”版本=“18.04.3 LTS(仿生海狸)”
他们也有类似的问题here,但他们使用--output到/tmp中的目录解决了这个问题,这没有帮助

db2dz4w8

db2dz4w81#

此外,我将为多克描述这个案例。
如果您使用的是Docker,启动具有权限的容器可以帮助您:
docker run --cap-add=SYS_PTRACE -it ubuntu:18.04 /bin/bash
https://github.com/dotnet/diagnostics/blob/master/documentation/FAQ.md#frequently-asked-questions

7gs2gvoe

7gs2gvoe2#

请检查您的服务的目录,createdump的权限,它需要执行权限才能工作,如果它看起来像这样:

ls -l | grep 'lib\|create'
-rw-rw-rw- 1 root root  109656 May 20 00:40 createdump

您必须授予执行权限:

sudo chmod u+x createdump
kmbjn2e3

kmbjn2e33#

当我想在运行AWS ECS的Docker容器中运行dotnet-dump时,遇到了同样的问题。
我必须启用SYS_PTRACE linux参数功能。
这是我在Terraform中定义容器定义时必须做的事情:

linux_parameters = {
    capabilities = {
        add = ["SYS_PTRACE"],
        drop = null
    },
    devices            = null,
    initProcessEnabled = null,
    maxSwap            = null,
    sharedMemorySize   = null,
    swappiness         = null,
    tmpfs              = null
}

相关问题