zoukankan      html  css  js  c++  java
  • Too many open files问题解决

    问题描述:java工程,启动tomcat后发现catalina.out启动日志 报错“Too many open files”

    原因:句柄数超出系统限制。

    句柄含义:不单是文件,也包括打开的通讯链接(比如socket),正在监听的端口等等

    解决:ulimit -a 可以查看当前系统设置的最大句柄数是多少,如下图 open files即是最大句柄数设置

    查看全部进程占用句柄数总和:lsof|awk '{print $2}'|wc -l

    查看某一个进程占用句柄数: ls -l /proc/pid(例如10124)/fd/ | wc -l

    查看系统中进程打开文件数的一个排序:lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

    如果总和超过最大句柄数设置,则设置最大句柄数即可,命令如下

    ulimit –n 65535  设置最大句柄数是65535

    可以再次输入ulimit -a 查看确认是否生效,如下图

    生效,解决! 

    ulimit –n 2000

    这个命令可以把默认的句柄数改为2000,但系统重启后会恢复默认值

    这个文件在系统中的默认值配置在/etc/security/limits.conf文件中,加入以下配置:

    * soft nofile 2000
    * hard nofile 2000
    或者

    * - nofile 2000
    其中hard的设置是实际的默认值,也就是上限,而soft的配置只是用来警告的,如果超过了soft的值,会有warn,而第三种用短横线– 的配置,则是hard和soft同时配置的方式。

    扩展:linux句柄如何理解

    在linux系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个fd,即是文件句柄。如果频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象。在linux系统中对进程可以调用的文件句柄数进行了限制,在默认情况下每个进程可以调用的最大句柄数是1024个,如果超过了这个限制,进程将无法获取新的句柄,而从导致不能打开新的文件或者网络套接字,对于线上服务器即会出现服务被拒绝的情况。

     
  • 相关阅读:
    Arial Monospaced
    也玩有道难题的双立方数问题:Python 版解法
    用 VB.NET 实现的非确定性计算例子
    Gestalt 在浏览器里用 python/ruby 写客户端脚本
    非确定性计算引擎转化为C#版本并重构
    再谈C#的装箱和拆箱
    谈谈.Net 4.0 中的委托delegate
    在C#中使用SqlDbType.Xml类型参数
    java cmd编译class文件
    Mysql、Oracle插表关于主键的处理
  • 原文地址:https://www.cnblogs.com/wanghongsen/p/11757634.html
Copyright © 2011-2022 走看看