Linux 打开文件限制及文件描述符限制 ulimit
Linux 打开文件限制及文件描述符限制 ulimit
在 Linux中可以更改打开文件的最大数量。使用ulimit命令,能够控制可用于 shell 或由它启动的进程的资源。
fs.file-max 系统所有进程一共可以打开的文件数量
fs.nr_open 单个进程可分配的最大文件数
#sysctl -a |grep fs.file-max
fs.file-max = 52363590
# sysctl -a |grep nr_open
fs.nr_open = 1048576
# cat /proc/sys/fs/nr_open
1048576
# cat /proc/sys/fs/file-max
52363590
Linux 中检查硬限制
# ulimit -Hn 65535
Linux 中的软限制
# ulimit -Sn 65535
报错信息
涉及系统模块为:Pam_limits.so模块
“I/O exception (java.net.SocketException) caught when processing request: Too many open files”
系统范围的文件描述符限制
设置全局限制
临时将打开文件限制增加到 500000,fs.file-max 系统所有进程一共可以打开的文件数量
sysctl -w fs.file-max=500000
临时配置生效
# ulimit -Sn 65535
# ulimit -Hn 65535
持久配置,用户需要注销并重新登录才能使更改生效,立即应用限制使用sysctl -p
# vi /etc/sysctl.conf
fs.file-max=500000
# sysctl -p
用户级别打开文件限制
对每个用户应用限制,nr_open设置的最大有效值为1024000,修改完要重新登录,不然session的句柄数不会生效。
/etc/security/limits.conf,这个文件可以配置用户的硬配置和软配置,硬配置是个上限。超出上限的修改就会出“不允许的操作”这样的错误。
- nproc 操作系统级别对每个用户创建的进程数的限制
- noflie 每个进程可以打开的文件数的限制
- Hard 严格设定,必定不能超过这个设定的值
- Soft 警告的设定,可以超过这个设定值但会有告警信息,要小于hard值
# vi /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 #vi /etc/security/limits.d/20-nproc.conf * soft nproc 20000 * hard nproc 20000 root soft nproc 65535 root hard nproc 65535
#修改/etc/pam.d/login
,增加:
#vi/etc/pam.d/login
session required pam_limits.so
#nginx 配置
如果是nginx,还需要注意这里,否则还是会报错,在/lib/systemd/system/nginx.service
的[Service]
段,增加:LimitNOFILE=100000
验证
# 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) 2062669 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65535 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) 20000 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited # ulimit -n 65535 # ulimit -u 20000