现象:
工作中遇到docker内有很多的僵尸进程,导致CPU过高,直接卡死。
原因:
每个进程都有一个唯一的标识,称为 pid,pid 是一个非负的整数值,使用 ps 命令可以查看其中 PID 是表示进程号。系统中每个进程都有对应的父进程,上面 ps 输出中的 PPID 就表示进程的父进程号。最顶层的进程的 PID 为 1,PPID 为 0。
一个父进程已经终止的进程被称为孤儿进程(orphan process)。操作系统这个大家长是比较人性化的,没有人管的孤儿进程会被进程 ID 为 1 的进程接管。
危害:
僵尸进程会在系统中保留其某些信息如进程描述符、进程 id 等等。以进程 id 为例,系统中可用的进程 id 是有限的,如果由于系统中大量的僵尸进程占用进程 id,就会导致因为没有可用的进程 id 系统不能产生新的进程,这种问题可就大了,这就是僵尸进程带来的危害。因此大部分情况下,我们都应当避免僵尸进程的产生。
解决方案:
dockerfile配置tini既可。
链接:https://github.com/krallin/tini
放在启动前面,然后再配置其他内容即可。