当前位置: 首页 > news >正文

僵尸进程问题排查

鲲鹏容器发现有大量僵尸进程 ,僵尸进程自容器创建以来, 一直存在。

僵尸进程的累积会导致fd耗尽, 新进程无法启动


通过分析bash的改动点发现,bash 从4.4 版本开始做了优化。
在4.4版本之前,若执行
“/bin/bash -c /usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && sleep 9999999d”, 通过fork + exec执行每个指令,父进程还是bash。 
在4.4版本之后, 在执行最后一条指令时, 不会进行fork, 直接exec , 进程主体变为sleep。

已知的,如果基础镜像是centos8, euler 会有这个问题

x86的一号进程是

/bin/bash -c /usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && sleep 9999999d

其中sleep 9999999d作为一号进程fork的子进程出现, 进程号是682。

基于此, 内部定位认为sleep作为1号进程时, sleep是个阻塞程序, 不具备init的职责, 因此无法回收子进程, 导致僵尸进程出现, 而x86不出现是因为1号进程不是sleep,而是

/bin/bash -c /usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && sleep 9999999d

x86和鲲鹏实际上使用的都是同样的entrypoint,但是一号进程却不一样, 经定位是由于bash版本导致的差异。 x86上Centos7使用的bash版本是4.2, 鲲鹏上openEuler使用的bash版本是5.1。 通过分析bash的改动点发现, bash 从4.4 版本开始做了优化。

在4.4版本之前,若执行“/bin/bash -c /usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && sleep 9999999d”, 则通过fork + exec执行每个指令, 父进程还是bash。 

解决方案

微调现有的entrypoint

# 在sleep 前加这一个 `time` 命令
/bin/bash -c /usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && time sleep 9999999d

【推荐】引入社区的tini作为容器镜像的1号进程

参见:  https://github.com/krallin/tini

tini -- /bin/bash -c "/usr/sbin/ssh & /usr/sbin/crond && bash /home/admin/start_container.sh jmg.jd.com 1 jdos_imagedownload 1014993 && sleep 9999999d"

注: tini 需要在基础镜像里填加,linux发行版默认不带。

 

http://www.xdnf.cn/news/1255897.html

相关文章:

  • 安卓10.0系统修改定制化____修改系统固件 实现刷写完成 开机默认关闭桌面搜索框
  • 【网络编程】IO多路转接——select
  • 2025年我国半导体材料产业链全景分析
  • MySQL聚簇索引与非聚簇索引详解
  • uni-app X能成为下一个Flutter吗?
  • Linux基础测试
  • .NET 10 新增功能系列文章5——C# 14 中的新增功能
  • 人工智能的20大应用
  • 基于django的非物质文化遗产可视化网站设计与实现
  • [LVGL] 布局系统 lv_flex, lv_grid | 输入设备 lv_indev | union
  • 云原生安全挑战与治理策略:从架构思维到落地实践
  • 从密钥生成到功能限制:Electron 中 secure-electron-license-keys 的完整集成方案
  • Python生产环境部署指南:专业级应用启动方案
  • 2025最新国内服务器可用docker源仓库地址大全(2025年8月更新) · DockerHub镜像加速全面指南
  • 音视频时间戳获取与同步原理详解
  • 容器之王--部署Docker私有仓库harbor母盘步骤演练
  • 合约收款方式,转账与问题安全
  • ansible-playbook之获取服务器IP存储到本地文件
  • 一文读懂 C# 中的 Bitmap
  • GPT-5 将在周五凌晨1点正式发布,王炸模型将免费使用??
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • 从Text2SQL到Text2Metrics:衡石指标管理技术跃迁
  • 网页前端CSS实现表格3行平均分配高度,或者用div Flexbox布局
  • 92-基于Django的豆瓣图书推荐系统的设计与实现
  • 六边形架构模式深度解析
  • 解锁高效开发:AWS 前端 Web 与移动应用解决方案详解
  • 探究 ASGI 的技术优势:现代 Web 开发的新方向
  • Docker可用镜像(长期免费)
  • 从Centos 9 Stream 版本切换到 Rocky Linux 9
  • C++ - 仿 RabbitMQ 实现消息队列--案例