ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ### **一、查看** ##### **系统级别** 系统级别的参数为pid_max,它表示系统中最大进程的Pid(其实就是限制了系统中的最大进程数)。可以通过如下的命令查看: ``` $ cat /proc/sys/kernel/pid_max $ cat /proc/sys/kernel/thread-max ``` ##### **用户级别** 用户级别的参数为nproc,它表示某个用户能运行的最大进程数。可以通过如下的命令查看(注意切换到指定用户下执行): ``` $ ulimit -u ``` 上面两个参数表示最大的进程(线程)数,如果要查看系统或用户已运行的进程(线程)数,可以通过如下的命令统计: ``` $ ps -eLf | wc -l # 统计系统的运行线程数,注意L参数,表示显示线程 $ ps -eLf | grep <user> | wc -l # 统计某个用户运行的线程数 ``` ##### **K8S相关** 另外,kubelet会限制其所有容器的进程数之和,默认值为65536,如下: ``` # k8s 1.23 版本 $ cat /sys/fs/cgroup/pids/kubepods.slice/pids.max # 最大值 65536 $ cat /sys/fs/cgroup/pids/kubepods.slice/pids.current # 已使用 53887 # k8s 1.8 版本 $ cat /sys/fs/cgroup/pids/kubepods/pids.max 65536 ``` ### **二、设置** 设置系统级别的pid_max,可通过如下方法: ``` $ sudo sysctl -w kernel.pid_max=655360 # 该命令等价于 echo 655360 > /proc/sys/kernel/pid_max ``` 上面只会临时写入到pid_max文件,如果要持久化,则在文件`/etc/sysctl.conf`中添加如下一行: ``` kernel.pid_max=655360 ``` 设置用户级别nproc,需要编辑文件`/etc/security/limits.conf`,添加如下一行: ``` <user> - nproc 655360 ``` 对于K8S,可以更改`/var/lib/kubelet/config.yaml`文件,添加配置`podPidsLimit` 参考:https://kubernetes.io/docs/concepts/policy/pid-limiting/ ### **三、FAQ** **Q:在执行命令`sudo sysctl -w kernel.pid_max=6553600`时,报错:“unable to set kernel.pid_max=6553600, invalid argument”?** A:这可能是因为pid_max不能设置为任意大,最后发现当把数值从6553600改成655360时,就没问题。