首页/系统/Linux 内核与性能调优速查/kernel.pid_max PID 编号空间
sysctl 内核参数72 条

kernel.pid_max PID 编号空间

系统 PID(含线程号)编号上限:内核默认 32768,允许范围到 4194304;高密度容器/线程场景需要评估。

PID 编号空间是什么

kernel.pid_max 规定系统可用的进程标识符上限,默认 32768,允许调整的上限是 4194304。PID 是循环复用的编号,用满之后内核会从头开始分配尚未占用的编号。需要注意线程也会消耗 PID 空间:一个多线程进程的每个线程都是一个任务,都要占用一个编号。高密度容器或多线程场景下,PGID 空间可能先于内存耗尽,表现为创建进程或线程失败。

基本信息

参数kernel.pid_max
默认值32768,许多发行版已上调,以本机回读为准
取值上限4194304
消耗者进程与线程都会占用编号
典型报错创建进程或线程失败,错误为资源暂时不可用
相关限制容器内的任务数限制由 cgroup 的 pids 控制器决定

典型使用场景

  • 高密度节点:容器与线程数量大,编号空间需要评估
  • 排查创建失败:区分是编号空间不足、线程泄漏还是容器任务数限制
  • 容量规划:按线程峰值乘以实例数量估算所需编号空间
  • 交付基线:在自动化装机流程中固化该参数,避免逐台调整
  • 故障复盘:结合当时的任务总数与编号使用情况分析

查看与调整

查看与调整
sysctl kernel.pid_max                  # 读当前上限
ps -eLf | wc -l                        # 当前任务(进程加线程)总量
ls /proc | grep -E '^[0-9]+$' | wc -l  # 当前存在的进程编号数量
sysctl -w kernel.pid_max=4194304       # 临时调整
cat /proc/sys/kernel/threads-max       # 线程上限,需一并核对

落盘与回读

落盘与回读
# /etc/sysctl.d/99-pid.conf
kernel.pid_max = 4194304    # 放宽编号空间,适配高密度线程场景
# 回读命令:sysctl kernel.pid_max

相关限制对照

限制作用范围触发表现
kernel.pid_max系统整体编号空间创建任务失败,错误为资源暂时不可用
threads-max系统线程总数上限线程创建失败,与编号空间叠加判断
cgroup pids.max容器的任务数上限容器内创建任务被拒,宿主此时可能仍有余量
RLIMIT_NPROC单用户可创建任务数同一用户下的进程创建失败
触顶表现为创建进程或线程失败,但在调整参数之前应先排除线程泄漏:任务总量持续增长而不回落,通常说明应用存在线程管理缺陷,抬高上限只会推迟故障。
容器内的任务数限制与这个参数不是同一层:容器被限制时的证据在 cgroup 的 pids 控制器里,宿主编号空间可能还很充裕。排查时应先确认到底在哪一层被拒绝。

易错点

  • 把编号空间与容器任务数限制混淆:不同层级,证据与处理方式都不同
  • 忽略线程消耗编号:多线程应用按进程数估算会严重低估
  • 不排查泄漏就抬高上限:线程泄漏的问题依然存在,只是故障被推迟
  • 遗漏线程总数上限:多个限制叠加生效,需要一起核对
  • 交付时只改一台:批量环境应写入基线配置,避免逐台手工维护

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/kernel.rst
  • man 5 proc
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌