求教Linux下Go进程僵尸的原因

请教下,有个Go+C开发的分布式服务(微服务组成)。由于涉及音视频转码操作,所以繁忙时间负载非常高。平均到每一核CPU上,超过5的负载,另外磁盘IO也很高。
目前这个服务有多个环境,每个环境有几台服务器。但其中一环境运行有点问题,有个微服务(主要做磁盘IO操作)有可能会成为僵尸进程。实在找不到什么原因。有没有人遇到过这种高负载情况下,进程会成为僵尸进程的情况。

已邀请:

gongxun - c/c++,golang,python,视频,深度学习领域

赞同来自:

忽略go的问题,僵尸进程的原因当然是 Child退出时,Parent没有wait/waitpid回收状态,锅在parent。


思路当然是分析这个进程是什么,由谁产生的,然后去分析child和parent的关系,看什么时候会出现不wait的情况。
以上都是我口胡的,我没有关注到类似的问题

yangbt - https://github.com/ybtq 在健身房写代码的程序猿

赞同来自:

@gongxun 谢谢,我问题没描述清楚。这个服务的所有子服务都是/sbin/init的子进程,所以child退出,导致僵尸进程的情况不存在。出问题的这个子服务出现过僵尸进程(用ps -el查看进程状态为z),也死过。由于开发人员的权限问题(刚开始没有该部署环境的权限,后面有部分权限),我没完全整明白它们两个是不是一回事。
在Gopher群里,大牛"看见明天"提到有可能是Data race引起。链接:https://docs.oracle.com/cd/E19205-01/820-0619/geojs/index.html 中的第二点。
这个确实是我们这个服务的问题(后续版本已修复)。

要回复问题请先登录注册