美文网首页
关于limit.conf和sysctl.conf文件的使用

关于limit.conf和sysctl.conf文件的使用

作者: moutory | 来源:发表于2024-01-07 16:46 被阅读0次

    前言

    今天迁移测试环境的es应用到新的服务器上面,重启后发现启动报错,解决方式是需要修改/etc/security/limit.conf/etc/sysctl.conf文件的配置,个人对于这两个文件有些陌生,所以写一篇文章来记录一下这两个文件的作用。

    一、关于limit.conf文件

    (一)报错信息分析
    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]`
    

    从报错信息提到了分配给es进程的最大文件描述符数太少了,要求我们至少增加到65536。在linux系统中,调整最大文件描述符数的配置文件在/etc/security/limit.conf文件中。下面我们来具体讲一下这个文件的作用

    (二)了解limit.conf文件的作用

    /etc/security/limits.conf是一个配置文件,用于设置Linux系统中用户和进程的资源限制。它定义了特定用户或用户组的资源限制,例如进程数量、文件描述符、内存使用等。
    limits.conf文件的作用是为系统管理员提供一种集中管理资源限制的方法,以确保系统资源的合理分配和使用。通过在配置文件中设置适当的限制,可以防止单个用户或进程占用过多的系统资源,从而提高系统的稳定性和安全性。

    limits.conf 文件的语法比较简单,每行包含一个限制规则,具有以下格式:

    <domain> <type> <item> <value>
    
    • <domain>:表示要应用限制的用户或用户组。可以是特定的用户名、用户组名,或者使用通配符(*)表示所有用户。
    • <type>:表示要限制的资源类型,例如 soft(软限制)或 hard(硬限制)。
    • <item>:表示要设置的资源项,如 nofile(文件描述符数量)、nproc(进程数量)、memlock(锁定内存大小)等。
    • <value>:表示资源的限制值,取决于所设置的资源项。可以是一个具体的数值,或者使用 unlimited 表示无限制。

    在这个案例中,我们需要在配置文件中加上如下配置

    esuser soft nofile 65535
    esuser hard nofile 65535
    

    其中esuser是启动es服务器的应用用户,我们设置这个用户最大的文件描述符数量为65535

    注意,修改完配置文件后需要重启系统才能生效。而且只有root或者其他授权用户才能修改这个文件

    (三)一些知识点的拓展
    • 软配置和硬配置
      上面在limit.conf文件中我们提到了支持我们配置限制类型。
      软限制(Soft Limit)是资源的一种可配置上限,它指定了进程或用户在正常情况下可以使用的资源数量或大小。软限制并不是强制执行的,它允许进程或用户在需要时超过软限制,但可能会受到系统的警告或限制。软限制通常用于提醒进程或用户在资源使用方面的限制,并帮助监控和管理资源的分配。

    硬限制(Hard Limit)是资源的最大限制,它指定了进程或用户在任何情况下可以使用的资源数量或大小。硬限制是强制执行的,系统会阻止进程或用户超过硬限制。如果进程或用户尝试超过硬限制,系统会报告错误或拒绝请求。硬限制通常用于确保系统资源的安全性和稳定性,防止某个进程或用户耗尽过多的资源

    • 文件描述符数量
      在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误(也就是说0-2这三个文件描述符在系统启动的时候就被占用了)。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话。
      通过设置文件描述符的数量,我们可以实现限制一个用户打开文件的数量,从而来限制这个用户的执行权限。

    • 如何看一个程序都用到了哪些文件描述符
      使用ll /proc/{pid}/fd命令,我们就可以看到某个程序用到的所有文件描述符

      es使用到的文件描述符
    • 关于elastchSearch为什么需要调整最大文件描述符数量的猜测
      其实从上一个小节的图片中我们可以看到,es会加载的文件很多,其中就包括了索引文件,这也很合理,毕竟人家ES的专业就是非关系型数据库,对索引文件的读取肯定是必要的。那么当索引文件变多,es应用需要管理的索引文件势必也就会更多,那么调整最大的文件描述符数量来保障ES服务的稳定运行也就十分有必要了。

    二、关于sysctl.conf文件

    (一)报错信息分析
    [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    

    报错信息提到我们需要把最大的虚拟内存区域调大到262144,在linux系统中这个配置需要在/etc/sysctl.conf文件中进行调整

    (二)了解sysctl.conf文件的作用

    sysctl.conf 是一个配置文件,用于在 Linux 系统中设置和调整内核参数。该文件位于 /etc/sysctl.conf 路径下,存储了一系列键值对,用于控制和配置操作系统的各种行为和功能。
    通过编辑 sysctl.conf 文件,系统管理员可以更改内核参数的默认值,以优化系统性能、调整网络配置、增强安全性等。在系统启动时,内核会读取该文件,并根据其中的配置来调整相应的参数。需要注意的是,sysctl.conf文件是一个十分重要的文件,没有特别的需要,尽量不要修改这个文件

    在这个案例中,我们需要加上以下配置来满足ES的启动要求

    vm.max_map_count=262144
    

    修改完成后,我们可以通过sudo sysctl -p /etc/sysctl.conf命令来使配置马上生效

    参考文章

    Linux的文件描述符 https://www.cnblogs.com/diantong/p/10413079.html

    相关文章

      网友评论

          本文标题:关于limit.conf和sysctl.conf文件的使用

          本文链接:https://www.haomeiwen.com/subject/ofigndtx.html