文档首页/ 弹性云服务器 ECS/ 故障排除/ 操作系统类(Linux)/ 如何解决ECS日志中出现Too many open files的错误?
更新时间:2024-09-06 GMT+08:00
分享

如何解决ECS日志中出现Too many open files的错误?

问题描述

Linux操作系统的ECS日志中出现“Too many open files”的错误。

可能原因

too many open files(打开的文件过多),表示程序打开的文件句柄数过多,超过了某一资源的限制。一般来说这个资源的限制包含两种维度的限制,包含系统的整体限制和用户单独的限制。出现该问题时需要判断具体超出了哪一维度的限制,再对该限制参数进行调整。

处理方法一:系统范围设置

  1. 以root用户登录云服务器。
  2. 执行以下命令,查看操作系统中当前打开的所有文件数和最大打开文件数设置(部分版本默认为366954)。

    cat /proc/sys/fs/file-nr

    cat /proc/sys/fs/file-max

    回显输出的第一列表示当前系统中所有打开的文件数。

  3. 执行以下命令,更改系统范围的最大打开文件数。

    vim /etc/sysctl.conf

  4. i键进入编辑模式。
  5. 在文件末尾添加如下内容,具体的数值可以根据实际情况修改。
    fs.file-max = 495000
  6. ESC键退出,并输入:wq保存配置。
  7. 执行以下命令,使修改生效。

    sysctl -p

处理方法二:用户层面设置

  1. 以root用户登录云服务器。
  2. 执行以下命令,检查当前打开文件数的限制。

    ulimit -n

  3. 执行以下命令,增加数量限制。

    ulimit -n <new_limit>

    该方法修改的参数值仅在当前运行中生效,重启后会还原为默认值,一般用于临时性验证。如需永久生效,请继续执行步骤4~8

  4. 执行以下命令,编辑/etc/security/limits.conf文件,增加打开文件的数量限制。

    vim /etc/security/limits.conf

  5. i键进入编辑模式。
  6. 在文件末尾添加如下内容,此处以655350为例,可根据具体情况修改数值。
    • 只针对特定用户
      user - nofile 655350
    • 所有用户
      * - nofile 655350
  7. ESC键退出,并输入:wq保存配置。
  8. 执行以下命令,重启服务器,使修改永久生效。

    reboot

    Linux操作系统云服务器中的限制资源使用的模块首先读取/etc/security/limits.conf,然后读取每个匹配的文件/etc/security/limits.d/*.conf,您在 /etc/security/limits.conf 中所做的任何更改可能会被后续文件覆盖。若重启后修改未生效请参见修改/etc/security/limits.conf文件,重启后不生效怎么办?处理。

相关文档