合 Linux中的soft nproc 、hard nproc、soft nofile、hard nofile、ulimit的最大进程数和最大文件数等说明
Tags: LinuxOSToo many open files最大文件数最大进程数ulimit
简介
"soft" 和 "hard" 的区别
Linux的 limit 限制分为2个策略:软限制和硬限制,硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。
通过ulimit -a 可以查看当前所有的limit信息,-S 是软限制,-H是硬限制,默认是软限制:
soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard xxx : 代表严格的设定,不允许超过这个设定的值。
如:soft 设为1024,hard设为2048 ,则当你使用数在1~1024之间时可以随便使用,1024~2048时会出现警告信息,大于2048时,就会报错。
1 2 3 4 5 6 7 8 9 | -- 查看 limit 软限制(等同于 ulimit -Sa): ulimit -a ulimit -Sa -- 查看 limit 硬限制: ulimit -Ha ulimit -Hu ulimit -Hn |
"nproc" 和 "nofile"的区别
nproc : 是操作系统级别对每个用户创建的进程数的限制(ulimit -u,最大进程数)
nofile : 是每个进程可以打开的文件数的限制(ulimit -n,最大文件数)
nofile对应open_files,最大文件数,太少会报错“too many open files”
nproc对应max_user_processes,最大进程数
正在运行中的文件句柄数和线程数
liunx中文件句柄有两种,一种是用户级的,一种是系统级的
文件句柄限制,就是规定的单个进程能够打开的最大文件句柄数量(Socket连接也算在里面,默认soft限制大小1024)
查看某个PID持有的句柄数,要查看某个进程目前打开的句柄数量:
1 2 | ls /proc/456220/fd | wc -l lsof -p 进程ID|wc -l |
查看某个进程句柄数量限制:
1 | cat /proc/2278/limits | grep files |
更多请参考:
https://www.cnblogs.com/sxdcgaq8080/p/11136887.html
https://www.cnblogs.com/sxdcgaq8080/p/11136952.html
配置
用户级别修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ll /lib64/security/pam_limits.so echo "session required /lib64/security/pam_limits.so" >> /etc/pam.d/login cat >> /etc/security/limits.conf <<"EOF" * soft nofile 655350 * hard nofile 655350 * soft nproc 655350 * hard nproc 655350 EOF sed -i 's/4096/655350/' /etc/security/limits.d/20-nproc.conf [root@lhrdb ~]# cat /etc/security/limits.d/20-nproc.conf * soft nproc 655350 root soft nproc unlimited [root@lhrdb ~]# |
要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中是否有以下选项,没有直接文末添加:
1234 echo "session required /lib64/security/pam_limits.so" >> /etc/pam.d/login[root@lhrdb ~]# cat /etc/pam.d/login | grep pam_limitssession required /lib64/security/pam_limits.so这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。
系统级别修改
参考:https://www.dbaup.com/dockerzhongshiyongsystemctlminglingshibaotoo-many-open-filescuowu.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | cat >> /etc/sysctl.conf <<"EOF" fs.file-max=9000000 fs.inotify.max_user_instances = 1000000 fs.inotify.max_user_watches = 1000000 kernel.pid_max=4194304 EOF sysctl -p cat /proc/sys/fs/file-max cat /proc/sys/fs/file-nr cat >> /root/.bashrc <<"EOF" ulimit -n 655350 ulimit -Hn 655350 ulimit -Sn 655350 EOF |
重启主机生效。
systemd 生效
如果使用systemd自启动服务,在高版本的CentOS等系统中,可能没有生效,此时需要进一修改/etc/systemd/system.conf
与/etc/systemd/user.conf
文件,文件尾部增加以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat >> /etc/systemd/system.conf <<"EOF" DefaultLimitCORE=infinity DefaultLimitNOFILE=655350 DefaultLimitNPROC=655350 EOF cat >> /etc/systemd/user.conf <<"EOF" DefaultLimitCORE=infinity DefaultLimitNOFILE=655350 DefaultLimitNPROC=655350 EOF systemctl daemon-reexec systemctl daemon-reload |
执行 systemctl daemon-reload命令,让配置文件即时生效。最后需要重启主机才能生效。
/etc/systemd/system.conf 及/etc/systemd/user.conf文件有什么区别呢