服务出现too many open files

​ too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

​ 因此我们要找到错误出现在服务中的大致位置,改正错误。

1. 找到服务进程号

1
ps -ef|grep service_name(服务名)

2. 查看服务连接数

1
2
lsof -p 进程号 | wc -l
lsof -p 进程号 > openfiles.log

这样就能查到是哪个连接数过多导致的服务器错误。

3. 解决方案

首先我们要做的就是在代码中及时的关闭连接,如果本身就需要这么多连接的话,我们就要执行以下命令:

1
cat /proc/进程号/limits

找到max open files查看最大文件数是否是系统默认的1024。

然后修改系统默认的最大打开文件限制。