栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2022-17 | docker-compose.yml配置init解决僵尸进程问题

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022-17 | docker-compose.yml配置init解决僵尸进程问题

docker-compose.yml 常用配置 init

Compose 3.7版本以上使用,对应Docker引擎18.02.0+

init为true启用,旨在在容器内运行docker-init进程来处理信号转发和回收进程。

init配置修复的生产:

生产环境原配置pm2为init进程,pm2负责维护其他服务,结构如下

docker-container
	|-- init(pm2)
		 |-- service_1
		 |-- service_2

service_2会spawn子进程,此时结构如下

docker-container
	|-- init(pm2)
		 |-- service_1
		 |-- service_2
		 		|-- child_process_1
		 		|-- child_process_2

生产环境因为service_2占用内存过高触发pm2的重启机制,此时如果有child_process正在运行,那么pm2 restart service_2会导致child_process成为僵尸进程。

正常的机制下如果僵尸进程的父进程为init进程,init进程会收割僵尸进程,但是由于此时僵尸进程的父进程为pm2,pm2没有任何收割机制,所以导致僵尸进程一直存在,并且由于pm2是init进程,只有重启容器才可以清除僵尸进程。

通过配置init: true,docker-init会作为init进程,其他进程作为其后代进程,此时结构如下

docker-container
	|-- init(docker-init)
			|-- pm2
            	|-- service_1
		 		|-- service_2

此时如果pm2容器服务,docker-init会成为僵尸进程的父进程,docker-init会立即收割僵尸进程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号