linux查看容器线程,容器化时代如何调试容器内线程

容器化时代如何调试容器内线程

容器化时代服务都是运行在一个个权限较低的docker内部,当服务异常是很难在docker内执行gdb、perf等调试工具去进行运行时分析,此时我们需要登录到pod所在的node节点的宿主机上以root权限来进行调试。

安装nsenteryum install util-linux

什么是nsenter

一个最典型的用途就是进入容器的网络命令空间。相当多的容器为了轻量级,是不包含较为基础的命令的,比如说 ip address,ping,telnet,ss,tcpdump ``等等命令,这就给调试容器网络带来相当大的困扰:只能通过 docker inspect ContainerID 命令获取到容器IP,以及无法测试和其他网络的连通性。这时就可以使用nsenter命令仅进入该容器的网络命名空间,使用宿主机的命令调试容器网络。此外,nsenter也可以进入 mnt, uts, ipc, pid, user 命令空间,以及指定根目录和工作目录。

原理

namespace是Linux中一些进程的属性的作用域,使用命名空间,可以隔离不同的进程。

Linux在不断的添加命名空间,目前有:mount:挂载命名空间,使进程有一个独立的挂载文件系统,始于Linux 2.4.19

ipc:ipc命名空间,使进程有一个独立的ipc,包括消息队列,共享内存和信号量,始于Linux 2.6.19

uts:uts命名空间,使进程有一个独立的hostname和domainname,始于Linux 2.6.19

net:network命令空间,使进程有一个独立的网络栈,始于Linux 2.6.24

pid:pid命名空间,使进程有一个独立的pid空间,始于Linux 2.6.24

user:user命名空间,是进程有一个独立的user空间,始于Linux 2.6.23,结束于Linux 3.8

cgroup:cgroup命名空间,使进程有一个独立的cgroup控制组,始于Linux 4.6

Linux的每个进程都具有命名空间,可以在/proc/PID/ns目录中看到命名空间的文件描述符。

使用nsenter [options] [program [arguments]]

options:

-t, --target pid:指定被进入命名空间的目标进程的pid

-m, --mount[=file]:进入mount命令空间。如果指定了file,则进入file的命令空间

-u, --uts[=file]:进入uts命令空间。如果指定了file,则进入file的命令空间

-i, --ipc[=file]:进入ipc命令空间。如果指定了file,则进入file的命令空间

-n, --net[=file]:进入net命令空间。如果指定了file,则进入file的命令空间

-p, --pid[=file]:进入pid命令空间。如果指定了file,则进入file的命令空间

-U, --user[=file]:进入user命令空间。如果指定了file,则进入file的命令空间

-G, --setgid gid:设置运行程序的gid

-S, --setuid uid:设置运行程序的uid

-r, --root[=directory]:设置根目录

-w, --wd[=directory]:设置工作目录

如果没有给出program,则默认执行$SHELL。

查找容器的PID# docker ps|grep hotfix

7b5f22758bf7 registry.cn-ha./xxxx/

# docker inspect -f '{{.State.Pid}} {{.Id}}' $(docker ps -q)|grep 7b5f22758bf7

14734 7b5f22758bf7ecf002e8aa3a418aef0593a4048f07c4297fde08cd7004facaba

进入namespace使用调试工具sudo nsenter -t 14734 -m -p gdb -p 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值