Too many open files错误与解决方法

致前辈:该问题的解决思路给了我很大的启发,文章摘抄自 马哥linux运维

  问题现象:这是一个基于Java的web应用系统,在后台添加数据时提示无法添加,于是登陆服务器查看Tomcat 日志,发现如下异常信息,java.io.IOException:too many open files

 通过这个报错信息,基本判断是系统可以使用的文件描述符不够了,由于Tomcat服务系统www用户启动的,于是以www 用户登陆系统,通过ulimit -n 命令查看系统可以打开最大文件描述符的数量:

$ ulimit -n

65535

可以看到这台服务器设置的最大可以打开的文件描述符已经是65535了,这么大的值应该够用了,但是为什么提示这样的错误呢?

解决思路,这个案例涉及ulimit 命令的使用

在使用ulimit 时,有以下几种使用方法:

  1.在用户环境变量中加入

如果用户使用的是bash,那么可以在用户目录的环境变量文件.bashrc或者.bash_profile中加入 ulimit -u 128 来限制用户最多可以使用128个进程

  2.在应用程序的启动脚本中加入

如果应用程序是Tomcat, 那么可以再Tomcat 的启动脚本startup.sh 中加入 ulimit -n 65535 来闲置用户最多可以使用65535个文件描述符

  3.直接在shell命令终端执行ulimit 命令

这种方法的资源限制仅仅在执行命令的终端生效,在退出或者和关闭终端后,设置失效,并且这个设置不影响其他shell 终端

解决问题:

  在了解ulimit 知识后,接着上面的案例,既然ulimit 设置没有问题,那么一定是设置没有生效导致的,接下来检查下启动 Tomcat 的 www 用户环境变量是否添加 ulimit 限制,检查后发现,www 用户并无ulimit限制。于是继续检查Tomcat 启动脚本startup.sh 文件是否添加了 ulimit限制,检查后发现也没有添加。最后考虑是否将限制加到了limits.conf文件中,于是检查limits.conf 文件,操作如下

#cat /etc/security/limits.conf | grep www

www soft nofile 65535

www hard nofile 65535

从输出可知,ulimit限制加在limits.conf文件中,既然限制已经添加了,配置 也没有什么错,为何还会报错,经过思考,判断只有一种可能,那就是Tomcat 的启动时间早于ulimit 资源限制的添加时间,于是首先查看下Tomcat 启动时间,操作如下

#uptime

Up 283 days

#pgrep -f tomcat

4667

#ps -eo pid, lstart, etime | grep 4667

4667 Sat Jul 6 09;33:39 2013 77-05:26:02

从输出可以看出,这台服务器已经有283天没有重启了,而Tomcat 是在2013年7月6号9点启动的,启动了将近77天,接着看看limits.conf文件的修改时间,

#stat /etc/security/limits.conf

通过stat 命令清楚的看到,limits.conf文件最后的修改时间是2013年7月12日,晚于Tomcat启动时间,如此,重启Tomcat之后问题解决。

  感悟:排查问题的思路清晰,循序渐进,最出彩的是排错过程中对各种细节的把握,服务的启动时间与配置文件的修改时间,这个细节让我很是受益,不亏是老运维出来的扎实功底。再敬 前辈。

时间: 2024-08-28 08:43:48

Too many open files错误与解决方法的相关文章

Django Ubuntu:Database returned an invalid value in QuerySet.dates(). 错误的解决方法

运行Windows下创建的Django项目时,发生此错误! Database returned an invalid value in QuerySet.dates(). Are time zone definitions and pytz installed? 按提示先安装pytz 1.先安装easy_install: sudo apt-get install python-setuptools 2.进入官网,获取下载地址,使用wget命令下载: wget https://pypi.pytho

在执行ab压力测试时出现socket: Too many open files (24)的解决方法

当入行压力测试时出现下列错误 [[email protected] ~]# ab -n 3000 -c 3000 http://192.168.0.2/This is ApacheBench, Version 2.3 <$Revision: 655654 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, htt

Unable to execute dex: Multiple dex files define 的解决方法

我们在引入library时可能会出现这个错误 比如:[2013-11-05 14:22:15 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/mobile/appstore/listjar/sdk/R$anim;[2013-11-05 14:22:15 - TabHostSample] Conversion to Dalvik format failed: Unable to execute dex: Mul

编程中遇到的Python错误和解决方法汇总整理

这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下 开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习.知识在于积累嘛!微笑+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++错误: 复制代码代码如下: >>> def f(x, y):      print x, y  >>> t

windows xp系统下提示Nsis Error错误的解决方法

通常我们在使用windows xp系统的过程中,经常会遇到一些故障问题,这不,使用windows xp系统的用户表示在使用系统的过程中出现提示Nsis Error错误的情况,其实这个问题也并不是常见,但是解决起来也非常的麻烦,那么,针对这样的问题,我们应该怎么来处理呢?以下是具体的操作步骤. 解决方法介绍: 1.英文意思:运行一个用Nullsoft Scriptable Install System (NSIS)建立的程序常会发生这种错误,起因可能是下载来的文件不完整,或存放该程序的磁盘区坏了,

CentOS 安装hping3工具及安装遇到的错误及解决方法

hping是用于生成和解析TCPIP协议数据包的开源工具.创作者是Salvatore Sanfilippo.目前最新版是hping3,支持使用tcl脚本自动化地调用其API.hping是安全审计.防火墙测试等工作的标配工具.它不仅能发送 ICMP 回应请求,它还可以支持 TCP.UDP.ICMP 和 RAW-IP 协议,它有一个路由跟踪模式,能够在两个相互包含的通道之间传送文件.Hping 常被用于检测网络和主机,其功能非常强大,可在多种操作系统下运行,如 Linux,FreeBSD,NetBS

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法: $ sudo /usr/lib/virtualbox/vboxdrv.sh setup        vboxdrv.sh: Building VirtualBox kernel modules.             vboxdrv.sh: Starting VirtualBox services.

Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法

Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER  启动 第二步:控制面板>所有控制面板项>管理工具>计算机管理>系统工具>共享文件夹>共享   右键单击“共享”>新建共享> 点击“下一步”>   单击“浏览”> 选择"本地磁盘(C:)">确定   单击“下一步”:     单击“

飞鸽传书 bind() error=10048错误的解决方法

提示  bind() 错误=10048 原因:其他程序占用飞鸽的 2425 端口 比如:飞秋也是使用2425端口 解决:用netstat命令查看是哪个进程占用了该端口 格式:netstat -ano | find "2425" 结果:  UDP    0.0.0.0:2425     *:*        1716 最后的1716就是占用2425进程的进程ID,看看是什么,可以结束的直接结束该进程,再打开飞鸽就可以了. 关于netstat命令可以输入命令 netstat /? 查看更多