too many open files解决方案
2022-01-18 本文已影响0人
风静花犹落
Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。
查询系统句柄数
通过命令ulimit -a
可以查看系统最大句柄数open files (-n) 1024
[root@localhost ~]# 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) 61783
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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) 61783
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
配置系统句柄数
编辑配置文件
vim /etc/security/limits.conf
增加open files值
* soft nofile 65535
* hard nofile 65535
-
*
表示所有用户
使配置修改生效
sysctl -p
查询已用句柄数
[root@localhost ~]# cat /proc/sys/fs/file-nr
4032 0 1512352
- 第1个值:已分配的句柄数 ,第2个值:已分配未使用的句柄数,第3个值:最大句柄数
查看进程句柄数
[root@localhost ~]# lsof -n | awk '{print $2}'| sort | uniq -c | sort -nr | more
43785 23421
38279 19755
33370 6978
30459 14344
26201 27856
22671 27070
22200 29171
11178 8854
10292 8305
10153 27565
9570 24299
8883 2767
7900 28919
6532 9769
5974 25107
5808 22621
4450 14598
4230 15598
- 第一列是句柄数,第二列是进程ID
查看详情
lsof | grep 进程ID
查询单个句柄数
lsof -p 进程ID | wc -l
查看程序默认配置cat /proc/进程ID/limits
[root@data1 ~]# cat /proc/19755/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 4096 127979 processes
Max open files 65535 65535 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 127979 127979 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us