开发者
【故障注入第二十五期】容器(Docker)故障模式-容器进程
【故障注入第二十五期】容器(Docker)故障模式-容器进程
发表于2023/10/09
120

关于容器(Docker)故障模式的说明,我们已经向大家介绍过半了,这一期我们继续学习容器(Docker)故障模式-容器进程。

注意:与容器内的进程相关的故障模式,大部分需要传入容器内的进程id作为参数,查询容器内的进程id的方式有以下三种:

  • 进入容器内部进行查询(容器内需要安装‘ps’程序):
  1. 首先,通过‘docker ps’查询到正在运行的容器id;
  2. 其次,再通过‘docker exec- it $containerId /bin/bash’进入到该容器的内部,其中变量$containerId为第一步查找的容器id;
  3. 然后,再在容器内部执行‘ps -ef’命令查询到对应的容器内的进程id;
  4. 最后,‘exit’退出容器即可。
  • 查看OS进程与容器进程的映射关系(推荐这种方法):
  1. 首先,通过‘docker ps’查询到正在运行的容器id;
  2. 其次,通过‘docker top $containerId’查询到想要进程所在的行,并取得对应的第二列的进程ID(容器内的进程再OS中的进程ID),其中变量$containerId为第二步查找的容器id;
  3. 然后,通过‘cat /proc/$containerPid/status | grep NSpid’命令查询出当前进程在所有命名空间内的进程ID,然后找到与$containerPid不同的进程ID,即为容器内该进程对应的进程ID值,其中$containerPid为上一步查询到的进程ID;​​
  • 进程容器的namespace进行查询(需要在宿主机上安装‘nsenter’与‘ps’程序):
  1. 首先,通过‘docker ps’查询到正在运行的容器id;
  2. 其次,通过‘docker top $containerId’查询到容器对应的宿主机OS的进程id(取输出任意行的第二列‘PID’的值),其中变量$containerId为第二步查找的容器id;
  3. 再次,通过‘nsenter -p -t $containerPid’进入到容器的进程namespace内,其中变量‘$containerPid’为第二步查找的容器对应的宿主机OS的进程id;
  4. 然后,执行‘mount -t proc proc /proc’命令重新挂载‘/proc’,以将进入的进程空间的进程信息挂载至OS的/proc目录下;
  5. 最后,执行‘ps -ef’命令查询到对应容器内的进程id;
  6. 另外,在退出当前命名空间之前,需要先执行‘umount /proc’命令将当前进程空间的进程信息数据从OS的/proc目录进行卸载,再执行‘exit’命令退出当前进程的namespace。​​​​
  • 容器进程异常退出

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E5%BC%82%E5%B8%B8%E9%80%80%E5%87%BA1.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E5%BC%82%E5%B8%B8%E9%80%80%E5%87%BA2.png

  • ​​​​​​​容器进程/线程死循环

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E6%AD%BB%E5%BE%AA%E7%8E%AF1.png​​​​​​​

    ​​​​​​​%E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E6%AD%BB%E5%BE%AA%E7%8E%AF1.1.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E6%AD%BB%E5%BE%AA%E7%8E%AF1.2.png

  • 容器进程/线程D状态

    ​​​​​​​%E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8BD%E7%8A%B6%E6%80%811.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8BD%E7%8A%B6%E6%80%812.png​​​​​​​

  • 容器进程挂起

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E6%8C%82%E8%B5%B71.png​​​​​​​

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E6%8C%82%E8%B5%B72.png​​​​​​​

  • 容器线程挂起

    ​​​​​​​%E5%AE%B9%E5%99%A8%E7%BA%BF%E7%A8%8B%E6%8C%82%E8%B5%B71.png

  • 容器进程Z状态

    ​​​​​​​%E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8BZ%E7%8A%B6%E6%80%811.png

    ​​​​​​​%E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8BZ%E7%8A%B6%E6%80%812.1.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8BZ%E7%8A%B6%E6%80%812.2.png

  • 容器进程的线程过多

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%BA%BF%E7%A8%8B%E8%BF%87%E5%A4%9A1.png​​​​​​​

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%BA%BF%E7%A8%8B%E8%BF%87%E5%A4%9A2.1.png​​​​​​​

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%BA%BF%E7%A8%8B%E8%BF%87%E5%A4%9A2.2.png

  • 容器进程句柄数耗尽

    ​​​​​​​%E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E5%8F%A5%E6%9F%84%E6%95%B0%E8%80%97%E5%B0%BD1.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E5%8F%A5%E6%9F%84%E6%95%B0%E8%80%97%E5%B0%BD2.1.png

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E5%8F%A5%E6%9F%84%E6%95%B0%E8%80%97%E5%B0%BD2.2.png

  • 容器线程异常退出

    ​​​​​​​%E5%AE%B9%E5%99%A8%E7%BA%BF%E7%A8%8B%E5%BC%82%E5%B8%B8%E9%80%80%E5%87%BA1.png

    %E5%AE%B9%E5%99%A8%E7%BA%BF%E7%A8%8B%E5%BC%82%E5%B8%B8%E9%80%80%E5%87%BA2.png​​​​​​​

  • 容器进程数过多

    %E5%AE%B9%E5%99%A8%E8%BF%9B%E7%A8%8B%E6%95%B0%E8%BF%87%E5%A4%9A1.png​​​​​​​

    ​​​​​​​容器(Docker)故障模式-容器进程我们就介绍到这,下一期我们一起来了解下,DemonCAT如何向容器网络中注入故障。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞