too many open files解决方案

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 

你可能感兴趣的:(too many open files解决方案)