一次 Docker 容器内大防DDoS量僵尸进程排查分析-墨者安全-墨者盾
DDOS防御_CC防护_高防CDN服务器_【墨者安全】—墨者盾墨者盾—你的网站贴身保镖!

QQ:800185041
高防免费接入:400-0797-119

渠道合作:156 2527 6999

主页 > CC防护 > 一次 Docker 容器内大防DDoS量僵尸进程排查分析

一次 Docker 容器内大防DDoS量僵尸进程排查分析

小墨安全管家 2020-10-22 17:24 CC防护 89 ℃
DDoS防御

孤儿进程:不能同年同月同日生,也不大概同年同月同日死

 

 

 

  "description"""

docker run -it --init you_docker_image_id 

ya       29513 19235  3 15:28 pts/6    00:00:00 node run.js 

增加特意的 init 进程,比如 tini

能够看到 PID 为 13 的僵尸进程基本托管到 PID 为 1 的 node 进程,然而没有被回收。

      break; 

        └── renderer(4) 

#include <stdlib.h> 

root        13    12  0 07:52 ?        00:00:00 [make_zombie] <defunct> 

    case 0: { 

  } else { 

在图片生成完成时,chrome 主进程退出,剩下的三个孤儿僵尸进程被托管到顶层 npm 进程下,然而 npm 进程无力回收,所有每生成一次图片便会新增三个僵尸进程。在成千上万次图片生成将来,系统中就充满了僵尸进程。

      // fork 失败 

  } else { 

    printf("enter if block\n"); 

#include <unistd.h> 

接下来咨询一具咨询题,父进程挂掉时,子进程会挂掉吗?

下面留一具作业题,考考你对进程 fork 函数的理解。如下程序延续调用三次 fork() 调用后会产生多少新进程?

└── chrome(1) 

    "start""node run.js" 

PID 为 1 的进程

ADD test.tar.gz . 

      // 子进程代码进入到那个地点 

  int child_pid = fork(); 

所以能够经过 fork 的返回值区分父子进程,在运行过程中能够使用 getpid 想法猎取当前的进程 id。fork 典型的使用方式如下所示。

      printf("in child process, pid=%d\n", getpid()); 

const { spawn } = require('child_process'); 

#include <stdio.h> 

ya       29513 19235  3 15:28 pts/6    00:00:00 node run.js 

  pid_t childPid; 

const cmd = spawn('./make_zombie'); 

  return 0; 

ya       22537 20759  0 19:57 pts/8    00:00:00 ./make_zombie 

kill -2 47120 

  } 

Node.js 提供了两种方案,第一种是使用 docker 官方的轻量级 init 系统,如下所示。

  return 0; 

int main() { 

pid_t fork(void); 

以下面的 Dockerfile 内容为例

UID        PID  PPID  C STIME TTY          TIME CMD 

打开 iTerm,在终端中执行一具命令,比如 "ls",实际上系统会创建新的 iTerm 子进程,那个 iTerm 进程又创建了 zsh 子进程。在 zsh 中输入的 ls 命令,则是 zsh 进程又启动了一具 ls 子进程。在 iTerm 中输入 ls 命令过程的进程关系如下所示。

ya       19234 19231  0 12月20 ?       00:00:00 sshd: ya@pts/6 

  printf("in main\n"); 

term signal receive: 15 

WORKDIR / 

    default: { 

使用这种方式是比较简单,而且之前线上没有出咨询题正是因为一开始是使用这种 bash 方式启动 node,后面有一具小兄弟为了统一启动命令将那个命令改为 npm run start,咨询题才浮上的。

#include <stdio.h> 

  signal(SIGINT, signal_handler); 

root         1     0  1 07:52 ?        00:00:00 node run.js 

  } 


DDoS防御

当前位置:主页 > CC防护 > 一次 Docker 容器内大防DDoS量僵尸进程排查分析

标签列表
DDoS防御
网站分类
X
 

QQ客服

400-0797-119