编辑
2023-12-28
Kubernetes
00
请注意,本文编写于 142 天前,最后修改于 40 天前,其中某些信息可能已经过时。

目录

docker 引擎
获取容器 pid
进入 pod 网络命名空间
containerd 运行时
获取容器 pid 并 进入pod网络命名空间
一条命令
containerd 版本
容器版本
TCP_alloc

docker 引擎

获取容器 pid

bash
# docker inspect -f '{{.State.Pid}}' <containerid> $ docker inspect -f '{{.State.Pid}}' 49b98b2fbad2 1840

进入 pod 网络命名空间

bash
# 进入 pod 网络命名空间 并 执行命令 sudo nsenter -t <pid> -n netstat | grep ESTABLISHED $ nsenter -t 1840 -n netstat |grep ESTABLISHED # 直接进入 nsenter -t 1840 --net

containerd 运行时

获取容器 pid 并 进入pod网络命名空间

bash
# 查看容器 pid root@kind-control-plane:/# crictl inspect 566f5ca610340 | jq .info.pid 2460 # 进入容器网络命名空间 root@kind-control-plane:/# nsenter --net -t 2460 # 执行ss命令查看socket概览 # ss -s Total: 9 TCP: 253 (estab 1, closed 252, orphaned 0, timewait 0) Transport Total IP IPv6 RAW 0 0 0 UDP 0 0 0 TCP 1 1 0 INET 1 1 0 FRAG 0 0 0 # 或 cat /proc/net/sockstat # 或 cat /proc/net/sockstat6 ipv6 sockets: used 1 TCP: inuse 1 orphan 0 tw 0 alloc 253 mem 198 UDP: inuse 0 mem 1280 UDPLITE: inuse 0 RAW: inuse 0 FRAG: inuse 0 memory 0 # 注意:其中 alloc

一条命令

containerd 版本

bash
for i in $(crictl ps -q);do pid=$(crictl inspect $i | jq .info.pid); echo "container_id: ${i}"; echo "pid: ${pid}"; echo -n "pod_name: "; crictl inspect "$i" | jq '.status.labels."io.kubernetes.pod.name"'; echo -n "pod_ip: "; nsenter --net -t "$pid" ip a s eth0 &> /dev/null && nsenter --net -t "$pid" ip a s eth0 | awk '/inet /{print $2}' | cut -d/ -f1 || nsenter --net -t "$pid" ip a s bond0 | awk '/inet /{print $2}' | cut -d/ -f1 echo -n "socket_num: "; nsenter --net -t "$pid" ss -s |awk 'NR==1{print $0}'; echo -e "\n"; done

容器版本

bash
docker 运行时版本不存在该问题

TCP_alloc

TCP_alloc 是 Linux 内核中的一个计数器,它表示当前已分配的 TCP 套接字(sockets)的数量。在许多情况下,这个计数器可以帮助诊断系统上的网络问题,尤其是那些与socket资源使用相关的问题。

当一个新的 TCP 连接被初始化时,系统会为它分配一个 socket 数据结构。TCP_alloc 计数器就是用来追踪这些被分配出去的 socket 的数量。如果一个系统生成了大量的 TCP 连接,TCP_alloc 的值将会增加。通常情况下,随着连接的正常关闭,这个计数器的值应当逐渐降低。如果这个值异常高且不下降,可能意味着有很多 TCP 连接没有正确关闭,或者系统正在遭受某种形式的资源耗尽攻击,如 SYN 泛洪。

在使用 ss -s 命令时,你会看到有关 TCP 和其他协议当前状态的统计信息,但是 TCP_alloc 的具体值通常不会直接显示在这个命令的输出中。不过,TCP_alloc 的值可以通过阅读 /proc/net/sockstat 或 /proc/net/sockstat6 文件来获取,这些文件包含了当前套接字使用情况的统计数据。比如:

输出可能会包含如下行:

bash
cat /proc/net/sockstat TCP: inuse 120 TCP:1 orphan 0 tw 0 alloc 130 mem 6

在这个例子中,alloc 130 表示当前共有 130 个 TCP 套接字被分配。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:liulei

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!