首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析在Kubernetes Linux中运行的dotnet核心进程的内存转储

分析在Kubernetes Linux中运行的dotnet核心进程的内存转储
EN

Stack Overflow用户
提问于 2018-10-19 17:36:14
回答 1查看 4K关注 0票数 2

我在Google (GKE)中使用Kubernetes。

我有一个存储内存的应用程序,我需要如这里所示,接受进程转储。库伯内特斯将杀死吊舱,当它到达512 of的RAM。

所以我连接到吊舱

代码语言:javascript
复制
# kubectl exec -it stuff-7d8c5598ff-2kchk /bin/bash

然后跑:

代码语言:javascript
复制
# apt-get update && apt-get install procps && apt-get install gdb

找到我想要的过程:

代码语言:javascript
复制
root@stuff-7d8c5598ff-2kchk:/app# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  4.6  2.8 5318004 440268 ?      SLsl Oct11 532:18 dotnet stuff.Web.dll
root      114576  0.0  0.0  18212  3192 ?        Ss   17:23   0:00 /bin/bash
root      114583  0.0  0.0  36640  2844 ?        R+   17:23   0:00 ps aux

但当我试图抛弃..。

代码语言:javascript
复制
root@stuff-7d8c5598ff-2kchk:/app# gcore 1
ptrace: Operation not permitted.
You can't do that without a process to debug.
The program is not being run.
gcore: failed to create core.1

我尝试了几个像这样的解决方案,结果总是一样:

代码语言:javascript
复制
root@stuff-7d8c5598ff-2kchk:/app# echo 0 > proc/sys/kernel/yama/ptrace_scope
bash: /proc/sys/kernel/yama/ptrace_scope: Read-only file system

我找不到连接到吊舱的方法来处理这件事。我发现码头有一个--privileged开关,但我找不到类似的库贝特。

更新我找到了如何启用PTRACE

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: <your-pod>
spec:
  shareProcessNamespace: true
  containers:
  - name: containerB
    image: <your-debugger-image>
    securityContext:
      capabilities:
        add:
        - SYS_PTRACE

获取进程转储:

代码语言:javascript
复制
root@stuff-6cd8848797-klrwr:/app# gcore 1
[New LWP 9]
[New LWP 10]
[New LWP 13]
[New LWP 14]
[New LWP 15]
[New LWP 16]
[New LWP 17]
[New LWP 18]
[New LWP 19]
[New LWP 20]
[New LWP 22]
[New LWP 24]
[New LWP 25]
[New LWP 27]
[New LWP 74]
[New LWP 100]
[New LWP 753]
[New LWP 756]
[New LWP 765]
[New LWP 772]
[New LWP 814]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
185     ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: No such file or directory.
warning: target file /proc/1/cmdline contained unexpected null characters
Saved corefile core.1

有趣的是,我找不到lldb-3.6,所以我安装了lldb-3.8:

代码语言:javascript
复制
root@stuff-6cd8848797-klrwr:/app# apt-get update && apt-get install lldb-3
.6
Hit:1 http://security.debian.org/debian-security stretch/updates InRelease
Ign:2 http://cdn-fastly.deb.debian.org/debian stretch InRelease
Hit:3 http://cdn-fastly.deb.debian.org/debian stretch-updates InRelease
Hit:4 http://cdn-fastly.deb.debian.org/debian stretch Release
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'python-lldb-3.6' for regex 'lldb-3.6'
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

查找SOS插件:

代码语言:javascript
复制
root@stuff-6cd8848797-klrwr:/app# find /usr -name libsosplugin.so
/usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.5/libsosplugin.so

运行lldb..。

代码语言:javascript
复制
root@stuff-6cd8848797-klrwr:/app# lldb `which dotnet` -c core.1
(lldb) target create "/usr/bin/dotnet" --core "core.1"

但它会永远卷起来,提示永远不会到达(lldb) .

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 17:13:36

我也有过类似的问题。尝试安装LLDB的正确版本。来自特定dotnet版本的SOS插件链接到LLDB的特定版本。例如,dotnet 2.0.5与LLDB 3.6链接,v.2.1.5与LLDB 3.9链接。另外,该文档可能会有所帮助:调试CoreCLR

注意,并非所有版本的LLDB都可用于某些操作系统。例如,LLDB3.6在Debian上不可用,但在Ubuntu上可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52897415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档