通过ulimit命令解决Too many open files

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

所属分类 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错误可以通过如下方式处理。

#同时打开的文件10240
ulimit -n 10240
#仅在本次连接生效,局部环境变量,重启会恢复默认值
vi /etc/profile
#在环境变量配置文件追加配置 
ulimit -n 10240
#保存后运行source /etc/profile 或 . /etc/profile使其生效
source /etc/profile
#只对当前修改用户生效,重启不会恢复默认值
#结尾添加
#soft是警告值,hard是真正意义的阈值,超过就会报错
* soft nofile 10240
* hard nofile 10240
#可以只用一句
* - nofile 8192
#*表示所有用户,可配置用户名,如:www
www soft nofile 10240
www hard nofile 10240
#该方式可以对所有用户生效,重启不会恢复默认值

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

发表观点

提示

昵称

邮箱

QQ

网址

当前还没有观点发布,欢迎您留下足迹!

同类其他

Linux

关键:Linux系统磁盘挂载

Linux系统一般情况下启动默认只加载系统盘,支持其他磁盘自由热插拔,如果发现自己的某些目录找不见了的时候不要慌看看是不是没有设置开机启动自动加载挂载磁盘内容,另外要特别注意首次安装系统记得磁盘挂载操作

Crontab配置定时任务处理日常工作

Linux服务器测试环境或正式生产环境常常设计一些定时例行处理的操作,如日记备份转移清理等,利用Crontab+Shell脚本组合实现定期定时操作,确保不会应工作繁忙忘记任务导致环境异常

awk强大的文本&文件的处理语言

awk,一种处理文本文件的语言,强大的文本分析工具。取三位创始人Alfred Aho、Peter Weinberger和Brian Kernighan的Family Name的首字符

多环境间信任关系添加的完整与快捷流程

项目上的开发和测试环境非常多,少则数十多则上百,实际工作中实在懒得来回登录或打开各个环境,最好的方案就是给内网环境间添加一下信任关系,便于快速在环境之间切换,免去输入密码的烦恼

交互式脚本expect脚本实现自动化

expect脚本由一系列expect-send对组成,等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应,特别适用于需要批量手动输入命令的自动化操作改造

Shell脚本循环逐行读取文件

Shell脚本循环读取文件常用的方案有输入重定向和管道操作,循环形式有while和for两种,具体的使用或搭配看个人习惯,个人尚未对命令进行性能验证

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核