重建操作很可能重置了容器的 cgroup 位置,这可以解释为何它现在又稳定了。
鉴于最初出现了无法分配线程的错误,且其他限制(ulimits、TasksMax、Docker PIDs)均设为无限制,剩下的可疑因素是 PID cgroup 压力。
能否在正常负载下检查以下内容:
cat /sys/fs/cgroup/pids.current
cat /sys/fs/cgroup/pids.max
如果 pids.current 接近 2000+,而 pids.max 约为 2285,则表明容器在调度器/Redis 重连突发期间确实达到了 cgroup PID 上限。
这也解释了为何该问题仅在升级后出现(线程切换更频繁),以及为何重建操作能暂时解决该问题。