当前位置: 首页 > 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.dtcms.com/a/319219.html

相关文章:

  • Github创建仓库,克隆提交代码到远程
  • 内存泄漏系列专题分析之三十二:高通相机CamX ION/dmabuf内存管理机制CmdBuffer
  • 【3D图像技术分析与实现】谷歌的AlphaEarth是如何实现的?
  • 鸿蒙RichEditor
  • 使用萤石云播放视频及主题模版配置
  • python安装部署rknn-toolkit2(ModuleNotFoundError: No module named ‘rknn_toolkit2‘)
  • 技术速递|Copilot Coding Agent:自定义设置步骤更可靠、更易于调试
  • P8250 交友问题
  • 表单元素与美化技巧:打造用户友好的交互体验
  • zookeeper因jute.maxbuffer启动异常问题排查处理
  • 如何开发一个运行在windows系统服务器上的服务
  • “物联网+职业本科”:VR虚拟仿真实训室的发展前景
  • 纳米陶瓷与光子集成:猎板PCB定义下一代VR硬件的技术蓝图
  • 【unity实战】使用Unity程序化生成3D随机地牢(附项目源码)
  • 飞机起落架轮轴深孔中间段电解扩孔内轮廓测量 - 激光频率梳 3D 轮廓检测
  • 如何将Dubbo从Zookeeper平滑地迁移到Nacos?
  • 38.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加日志记录器
  • Android视图状态以及重绘
  • Java面试宝典:类加载
  • 利用vue.js2X写前端搜索页面,express写后端API接口展现搜索数据
  • SymPy 中 atan2(y, x)函数的深度解析
  • vue3对比vue2的性能优化和提升 :Vue 3 vs Vue 2
  • ArkTS: McPointChart
  • 【Redis面试精讲 Day 16】Redis性能监控与分析工具
  • 从Web2.0到Web3.0——用户体验如何演进
  • 树莓派安装中文输入法
  • Day09 Tlisa登录认证
  • Linux总线,设备和驱动关系以及匹配机制解析
  • FPGA学习笔记——VGA显示静态图片(ROM IP核)
  • 【博弈 拓扑序 缩点】P9220 「TAOI-1」椎名真昼|省选-