关于limit.conf和sysctl.conf文件的使用
前言
今天迁移测试环境的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)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话。
通过设置文件描述符的数量,我们可以实现限制一个用户打开文件的数量,从而来限制这个用户的执行权限。 -
如何看一个程序都用到了哪些文件描述符
es使用到的文件描述符
使用ll /proc/{pid}/fd
命令,我们就可以看到某个程序用到的所有文件描述符
-
关于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