1.背景
在切换用户时出现 bash: fork: retry: Resource temporarily unavailable,资源不足错误。一般是系统的进程数,打开文件数设置过小导致
2.用户进程数
解决方法
1、编辑/etc/security/limits.conf 文件,退出生效
一般是 nofile与nproc不够用,指打开文件数,与打开进程数
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
* soft fsize unlimited
* hard fsize unlimited
* soft cpu unlimited
* hard cpu unlimited
* soft rss unlimited
* hard rss unlimited
备注:
soft指的是当前系统生效的设置值,软限制也可以理解为警告值。
hard表名系统中所能设定的最大值。一般两个参数一致
*
代表任意用户
2、进入/etc/security/limits.d/文件夹,查看当前用户的生效与那个文件相关,直接修改
退出即时永久生效
进程数系统总限制
如果普通用户最大进程数设置65535 ,最后是受全局的kernel.pid_max的值限制。也就是说kernel.pid_max=1024 ,就算你用户的max user processes的值是65535 ,用户能打开的最大进程数还是1024。
查看全局的pid_max方法:
方法一:
cat /proc/sys/kernel/pid_max
方法二:
sysctl kernel.pid_max
kernel.pid_max = 32768
修改这个值方法:
echo 65535 > /proc/sys/kernel/pid_max
所以以上都操作完成后,才算是正确修改了max user processes 的值
上面只是临时生效,重启机器后会失效
永久生效方法:
在/etc/sysctl.conf中添加kernel.pid_max = 65535
vim /etc/sysctl.conf
kernel.pid_max = 65535
或者:
echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
然后重启机器。
验证
ulimit -a
#返回
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 514996
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 655350
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 40960
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
网友评论