反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

Linux最大打开文件数

  • 文档创建者:Wendy123456
  • 历史版本:8
  • 最近更新:Carly 于 2022-11-30
  • 1. 概述

    在使用 Linux 服务器部署 FineReport 时,有时会出现报错打开的文件过多或者too many open files,如下图所示:

    37.png

    Linux 系统对每个登录用户打开的最大文件数有限制,这个限制通过ulimit -n可以看到,一般是 1024 。在一些并发或多线程情况下, 需要突破这个限制,因此需要手动改掉 Linux 系统的最大打开文件数。该修改在不同情况下会涉及到 3 个关键值。 

    2. 参数说明

    2.1 相关参数说明

    1)nofile 

    该值是指单进程的最大打开文件数。

    2)nr_open 

    该值是指单个进程可分配的最大文件数,通常默认值为1024*1024=1048576。

    3)file-max 

    该值是系统内核一共可以打开的最大值,默认值是185745。

    2.2 修改策略

    一般情况下,nofile 的值不允许超过 nr_open 和 file-max 的值。因此在修改 nofile 时要考虑是否超过以上两个值的情况:

    • 当要修改的「nofile」值(最大打开文件数)未超过「nr_open」和「file-max」两个值时,直接修改「nofile」值即可;

    • 当要修改的「nofile」值(最大打开文件数)超过「nr_open」和「file-max」两个值时,不仅要修改「nofile」的值,还要修改「nr_open」和「file-max」的值满足「大于nofile」值。

    3. 修改方法

    3.1 查看相关参数大小

    查看修改前参数的大小,如下图所示:

    1599728103695186.png

    命令如下所示:

    cat /proc/sys/fs/nr_open
    cat /proc/sys/fs/file-max
    ulimit -n

    3.2 修改 limit 中 nofile 值

    当要修改的「nofile」值(最大打开文件数)未超过「nr_open」和「file-max」两个值时,直接修改「nofile」值即可。

    3.2.1 临时生效

    输入ulimit -n 128000,如下图所示:

    3.2.2 永久生效

    注:参考该节步骤一后,直接执行 reboot 重启服务器,即可生效;若不想重启服务器,可参考本节完整步骤。

    1)使用vi /etc/security/limits.conf编辑 limits.conf 文件,修改 nofile 值(其中 128000 即为修改的 nofile 值),如下所示:

    vi /etc/security/limits.conf  #进入文件编辑界面
    * soft nofile 128000 #确保有该行内容
    * hard nofile 128000  #确保有该行内容

    注:有的系统需把「*」替换为具体用户名才生效,例如 root soft nofile 128000

    2)编辑/etc/pam.d/login文件,确保有下面内容,并保存。如下图所示:

    session required pam_limits.so

    3)使用exit语句退出终端重新登录即可。如下图所示:

    1622786874157090.png

    3.3 nr_open 和 file-max 值

    3.3.1 临时生效

    echo 1200000 > /proc/sys/fs/nr_open
    echo 200000 > /proc/sys/fs/file-max

    3.3.2 永久生效:需重启服务器

    当要修改的最大打开文件数超过 nr_open 和 file-max 时,就需要改动该值,将该值提高。其修改方式如下:

    在文件/proc/sys/fs/nr_open
    中加入如下代码:(1200000 为修改的参数值)

    fs.nr_open=1200000

    在文件 /proc/sys/fs/file-max 中插入如下代码:

    fs.file-max=200000

    保存并执行 reboot 重启服务器。

    注:Linux的内核参数 nr_open 只有在内核版本是 2.6.25 之后的版本才可设置。查看内核版本使用命令“uname -a”。

    然后再修改 nofile 值 ,请参见 3.2 节。

    3.3.3 永久生效:无需重启服务器

    /etc/sysctl.conf中设置fs.nr_open= 1200000 fs.file-max=200000,然后执行sysctl -p,使配置生效。如下所示:

    3.4 效果查看

    通过cat /proc/pid/limits查看单进程最大打开文件数,如下图所示:

    4. 注意事项

    4.1 普通用户修改未生效

    问题描述

    参考本文 3.2.2 节无需重启服务器的步骤后,普通用户修改未生效,使用 ssh 连接 Linux 报错:ulimit: open files: cannot modify limit: Operation not permitted

    原因分析

    该问题发生在 openssh 升级之后,且只有 ssh 登录才发生此问题,与 ssh 有关。

    解决方案

    1)修改sshd_config文件,将#UseLogin no修改为UseLogin yes,如下所示:

    vi  /etc/ssh/sshd_config

    1622787197550645.png

    2)使用service sshd restart重启 ssh 服务。

    附件列表


    主题: 部署集成
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526