如何处理错误:系统中打开的文件过多?

我正在运行一个cron和输出到我的id和获取下面的输出:

/ bin / sh:/ usr / bin / php:系统中打开的文件过多

克龙每5分钟运行一次。

已经检查/var/logs/cron和cron每5分钟执行一次。

网站在服务器上正常工作。

这意味着你的系统用完了文件句柄,无论是在你的PHP或其他应用程序。 确保closures您打开的任何文件以释放文件句柄。

对于每个正在运行的程序的句柄数,使用(以root身份):

 for p in $(ps -A -o pid); do nh=$(ls /proc/$p/fd 2>/dev/null | wc -l) && exe=$(readlink -f /proc/$p/exe 2>/dev/null) && echo "$p ($exe): $nh" done 

对于更详细的输出,请使用lsof

你还可以通过modyfing /etc/security/limits.conf (它影响到/proc/sys/fs/file-max变化)来增加可能的系统文件句柄的数量,并用ulimit -n减less当前的terminal会话。

通过以下方式检查您目前在系统中打开了多less个文件:

 $ sysctl kern.num_files 

以下是你的内核限制:

 $ sysctl kern.maxfiles 

要检查打开哪些常规文件,该命令可以帮助:

 lsof | grep -w REG | less 

如果你的限制太低,那么通过这些命令增加它(作为root运行):

 sysctl -w kern.maxfiles=20480 sysctl -w kern.maxfilesperproc=4096 

注意:如果需要从用户帐户运行,请添加sudo

然后再试一次。

要永久设置,请将其添加到/etc/sysctl.conf

 kern.maxfiles=20480 kern.maxfilesperproc=4096 

如果您无法更改限制,请联系您的托pipe服务提供商。