这类问题我又碰上了一次。业务高峰时新请求全部失败,日志里写创建进程失败,内存和磁盘都还有富余,进程列表里能看到大量同名的短命进程。

把日志和配置对完,能解释这个现象的基本就这几处。进程号上限被用完,无法再创建新进程;短命进程创建频率高得离谱;僵尸进程一直占着未回收的进程号。

第一件事是看进程号上限和已用数量

sysctl kernel.pid_max && ps -e | wc -l

接着统计僵尸进程数量

ps -eo stat | grep -c Z

调大进程号上限

sysctl -w kernel.pid_max=4194304

剩下的就是排查高频创建进程的来源

pidstat -w 1 5

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

怎么算真的好了,看的是同一批现象。进程号上限足够使用,创建失败消失,进程数量回到正常水位。

补一句。报错文案提到内存,实际却是进程号耗尽,这类误导性提示要看错误码,不能只相信字面意思。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189