📖通过ulimit命令解决Too many open files

发布: 2015-10-30
热度: 49
趋势: 49
权重: 0
🎯

项目启动报错:Too many open files,通过ulimit命令可以查看与管理用户/程序/进程占用资源情况,其中比较实用的是可以根据资源情况配置linux用户的最大进程数

Too many open files

Too many open files 错误在 Linux 系统中是非常常见的。

从字面意思上看就是说程序打开的文件数过多,不过这里的 files 不单是文件的意思,实际上包括通讯链接、端口等。

因此称之为做句柄(handle)会更合适,因此这个错误通常叫做句柄数超出系统限制。

产生原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

比如米虫遇到这个错误就是启动某个 Web 项目时,Tomcat 启动报错了。

解决思路

既然错误说明都很清晰了,解决问题方案自然就 2 个:

  1. 增大系统最大句柄数
  2. 减少实际使用的句柄(比如某个应用移植到别的环境中)

ulimit 语句

ulimit 是 Linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。

Linux 对于每个用户,系统限制其最大进程数。

为提高性能,可以根据设备资源情况,设置各 linux 用户的最大进程数。

基本语法

ulimit [-参数符] [选填:设置值]

参数说明

  • -H 设置硬资源限制(Hard);
  • -S 设置软资源限制(Soft);
  • -a 显示当前所有的资源限制;
  • -c [设置值]:设置 core 文件的最大值;单位:blocks
  • -d [设置值]:设置数据段的最大值;单位:kbytes
  • -f [设置值]:设置创建文件的最大值;单位:blocks
  • -l [设置值]:设置在内存中锁定进程的最大值;单位:kbytes
  • -m [设置值]:设置可以使用的常驻内存的最大值;单位:kbytes
  • -n [设置值]:设置内核可以同时打开的文件描述符的最大值;单位:n
  • -p [设置值]:设置管道缓冲区的最大值;单位:kbytes
  • -s [设置值]:设置堆栈的最大值;单位:kbytes
  • -t [设置值]:设置 CPU 使用时间的最大上限;单位:seconds
  • -v [设置值]:设置虚拟内存的最大值;单位:kbytes
  • -u < 程序数目 >  用户最多可开启的程序数目

[设置值]可以为数字和 unlimited(无限制),但要注意的是并不是所有字段都可以设置为无限制

处理实例

针对上面提到的 Too many open files 错误可以通过如下方式处理。

ulimit 命令修改

#同时打开的文件10240
ulimit -n 10240
#仅在本次连接生效,局部环境变量,重启会恢复默认值

配置环境变量文件

profile 环境变量

vi /etc/profile
#在环境变量配置文件追加配置 
ulimit -n 10240
#保存后运行source /etc/profile 或 . /etc/profile使其生效
source /etc/profile
#只对当前修改用户生效,重启不会恢复默认值

limits.conf 配置文件

#结尾添加
#soft是警告值,hard是真正意义的阈值,超过就会报错
* soft nofile 10240
* hard nofile 10240
#可以只用一句
* - nofile 8192
#*表示所有用户,可配置用户名,如:www
www soft nofile 10240
www hard nofile 10240
#该方式可以对所有用户生效,重启不会恢复默认值
当前文章暂无讨论,留下脚印吧!
大纲
  • Too many open files
    • 解决思路
  • ulimit 语句
    • 基本语法
    • 参数说明
  • 处理实例
    • ulimit 命令修改
    • 配置环境变量文件
      • profile 环境变量
      • limits.conf 配置文件
提交成功,请等待审核通过后全面展示!

发表评论

昵称
邮箱
链接
签名
评论

温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。

选择头像