too many open files,很明显打开文件数过多了。

第一个问题来了,如何查看当前进程打开的文件数和最大打开文件数呢?

当前进程打开文件数 

ls /proc/[pid]/fd|wc -l 当前进程最大打开文件数

cat /proc/[pid]/limits|grep open

可以看到如下所示的输出:

Max open files            1024                 4096                 files

当前系统最大打开文件数

ulimit -n 第二个问题是我该如何修改进程的最大文件打开数呢?

找到最大文件打开数的设置方法,这个问题也就解决了,通常有下面几种修改方式:

1)ulimit -n 102400 直接使用ulimit命令修改,但这个只会对当前会话生效,终端关闭后,设置丢失。

2)/etc/security/limitd.conf

*               soft   nofile       102400

/etc/security/limitd.conf 在每一个会话创建时都会加载,所以修改这里是一个使配置长期生效的方法。

3)修改shell的启动项,将ulimit -n 102400放进去,每次创建会话时也会加载。一般是/etc/profile文件,或者/etc/profile.d/limits.sh中。ulimit -nsupervisord来管理的,也就是这进程都是 supervisord 的子进程,而 supervisord 的最大文件打开数还是老的配置,此时必须重启 supervisord

当大家遇到limits修改不生效的时候,请查一下进程是否只是子进程,如果是,那就要把父进程也一并重启才可以。