[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时,就没问题。
- 常用命令
- 用户与用户组
- 创建用户与用户组
- 快速脚本
- umask
- Yum源
- 基础Yum源
- Epel源
- 制作Yum源
- 同步Yum源
- 为Yum源配置代理
- 下载RPM及依赖
- 系统与内核
- 获取内核的rpm包
- 升级内核
- Iptables
- 基本语法
- 匹配条件
- 基础匹配条件
- 扩展匹配条件
- Addrtype
- Set
- TCP
- Mark
- Multiport
- 目标
- 基本目标
- 扩展目标
- DNAT
- LOG
- CT
- NOTRACK
- MARK
- IP set
- 连接追踪
- 初识连接追踪
- 连接追踪详解
- NAT
- 思路与参考汇总
- 数据结构
- FAQ
- Keepalived
- 单网卡多VIP
- 安装Keepalived
- 双网卡绑VIP
- 别名VIP和辅助VIP
- LVS
- 安装LVS
- Ipvsadm命令
- 磁盘与分区
- 基础知识
- 创建分区
- 格式化与挂载
- Fstab
- LVM
- LVM扩容
- Swap分区
- Tmpfs
- 网络相关
- 重命名网卡
- resolv.conf
- Tcpdump
- nslookup与dig
- ifcg-xxx
- 主机名
- 软件安装
- NFS
- Squid
- Redsocks
- Shadowsocks
- 时钟同步
- Chrony
- FTP
- 文件句柄
- 简介
- 设置文件句柄
- 其他
- SSH密钥登录
- 进程组-会话-终端
- X11转发
- 环境变量
- 常见问题
- 系统进程数
- 系统调用
- 系统调用FAQ
- 用户程序如何进行系统调用