【kafka专栏】生产级集群安装之OS最大打开文件句柄数量配置

在使用hadoop、kafka、flink等大数据处理架构的时候,或者应用打开文件或者连接数量(多线程)较多的时候,可能会遇到这样的报错信息,比如:

  • Too many open files in system :通常在系统级别文件句柄数到达上限时出现该异常信息。
  • Too many open files :通常在进程级别文件句柄数到达上限时出现该异常信息。

这是因为linux操作系统有文件打开句柄数最大数量的限制,通常在大数据应用环境下,需要把这个设置参数调高,否则就会出现上面提到的异常。

1.系统级别:file-max最大打开文件描述符数

/proc/sys/fs/file-max中指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别, kernel-level)。

  • 查看默认值

可以使用cat /proc/sys/fs/file-max来查看当前系统中单进程可打开的文件描述符数目

> cat /proc/sys/fs/file-max
94382
  • 重新设置值
    当收到"Too many open files in system"这样的错误消息时, 就应该增加这个值了. 但是在绝大多数情况下,这个值都不需要调整,因为它的默认值足够大。大家理解下这个参数存在意义即可。
echo 1000000 > /proc/sys/fs/file-max;     #临时性设置,系统重启失效
fs.file-max = 1000000   #永久性:在/etc/sysctl.conf中设置

2. 进程级别:nr_open是单个进程可分配的最大文件数

内核支持的最大file handle数量,即一个进程最多使用的file handle数

> cat  /proc/sys/fs/nr_open
1048576

修改nr_open的值:

> echo 2000000 > /proc/sys/fs/nr_open

同样,在绝大多数情况下,这个值都不需要调整,因为它的默认值足够大。

3. 进程级别:nofile用户单个进程最大打开文件描述符数

  • 查看默认值,它的默认值1024。这个值是比较小的,99%的“Too many open files”异常都是这个值造成的。
> ulimit -n
1024

当然上面命令默认查看的是软资源限制值soft limit,如果想要查看系统硬件所能支持的单进程最大打开文件描述符号的数目,可以使用ulimit -Hn

  • 参数重新设置

在/etc/security/limits.conf中进行设置(需要root权限修改该文件),可添加如下两行,表示用户kafka最大打开文件描述符数的soft limit为65535,hard limit为65535。

kafka  soft   nofile         65535
kafka  hard   nofile        65535

该配置在关闭session重新登录之后生效,ulimit -n的值会变成65535

注意:设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,用户注销后无法正常登录。

4. file-max, nr_open, onfile之间的关系

  1. 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
  2. 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
  3. nofile的soft limit不能超过其hard limit
  4. nofile的hard limit不能超过/proc/sys/fs/nr_open

猜你喜欢

转载自blog.csdn.net/hanxiaotongtong/article/details/124813782