Too many open files这个问题主要指的是进程企图打开一个文件,或者叫句柄,但是现在进程打开的句柄已经达到了上限,已经无法打开新句柄了。

网上一提到这个问题就要增加句柄上限,而往往这种情况的发生是因为错误的使用了句柄,可以称作句柄泄漏,找到句柄达到上限的原因才是王道。

以下是Linux中句柄的介绍

Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。

对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以下命令来查看:

ulimit –a

执行结果如下:

其中的open files一项就是默认的句柄数,此时默认的句柄数是1024

还可以设置某个进程的句柄数上限,命令是:

ulimit –a PID

执行结果如下:

也是看open files一项,可以看到,该进程的句柄上限也是1024

这个句柄数是可以改的,修改默认的句柄数,命令如下:

ulimit –n 2000

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

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

* soft nofile 2000
    * hard nofile 2000

或者

* - nofile 2000

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

下面看一下如何查询系统中进程占用的句柄数

使用的命令是:

lsof -n|awk '{print $2}'|sort|uniq -c|sort-nr|more

lsof命令是Linux中的一个系统监视命令,可以查看进程打开的文件、端口等,功能强大,上面的命令通过一串的管道后只保留了句柄数和PID,执行结果如下:

第一列是句柄数,第二列是进程id

可以看到前两个进程的句柄数已经超过上限了,这正是这两个进程的日志正在报文章最上方的异常。

下面查询某个进程都占用了一些什么样的句柄

比如查询PID为25950的进程,使用的命令是

lsof |grep 25950

执行结果如下:

这里是截取的一部分,每列的含义如下:

1,进程名称

2,PID

3,进程所有者

4,文件描述符

5,文件类型

文件类型有以下几种:

DIR:表示目录。

CHR:表示字符类型。

BLK:块设备类型。

UNIX: UNIX 域套接字。

FIFO:先进先出 (FIFO) 队列。

IPv4:网际协议 (IP) 套接字。

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称
 ————————————————
版权声明:本文为CSDN博主「lkforce」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lkforce/article/details/80710459

linux too many files的更多相关文章

  1. 如何处理错误消息Please install the Linux kernel header files

    Please install the Linux kernel "header" files matching the current kernel 当我启动minilkube时遇 ...

  2. Python classes to extract information from the Linux kernel /proc files.

    python/python-linux-procfs/python-linux-procfs.git - Python classes to extract information from the ...

  3. linux修改open files数

    概要 linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...

  4. linux extract rar files

    Extract rar-archives If you need to extract rar files in Linux, you have to download and install unr ...

  5. [转载]linux修改open files数

    概要:linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...

  6. Linux recursively find files

    https://stackoverflow.com/questions/5905054/how-can-i-recursively-find-all-files-in-current-and-subf ...

  7. Symantec Backup Exec 2012 Agent For Linux安装

    Backup Exec 2012 介绍 Backup Exec 2012 是一种为虚拟和物理环境提供保护的集成产品,能够简化备份和灾难恢复,并提供了无可匹敌的恢复功能.借助于强大的 Symantec ...

  8. Linux 下应用程序最大打开文件数的理解和修改

    运行在Linux系统上的Java程序运行了一段时间后出现"Too many open files"的异常情况. 这种情况常见于高并发访问文件系统,多线程网络连接等场景.程序经常访问 ...

  9. Oracle EBS R12 (12.1.3) Installation Linux(64 bit)

    Oracle EBS R12 (12.1.3) Installation Linux(64 bit) Contents Objective. 3 1 Download & Unzip. 3 D ...

随机推荐

  1. ping IP 带时间戳循环显示并写入日志(windos版+linux版)

    在工作中,判断网络是否通畅,首选命令就是ping,但有时候我们需要持续ping一个或多个地址时,需要加 -t 即可,但有时候需要在ping的时候加入时间戳并把ping记录写入到日志里面,方法如下: w ...

  2. 2.Git 结构

    1.Git 结构: 使用git add命令将写的代码暂存到暂存区:使用git commit命令将暂存区的代码提交到本地库: 2. Git 结构及其代码托管中心: workSpace:工作区(写代码). ...

  3. 部署Nginx网站服务实现访问状态统计以及访问控制功能

    原文:https://blog.51cto.com/11134648/2130987 Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力,单个物 ...

  4. Thrift使用入门---RPC服务

    https://blog.csdn.net/zkp_java/article/details/81879577 RPC基本原理 大部分的RPC框架都遵循如下三个开发步骤: RPC通信过程如下图所示 通 ...

  5. 《The one!》团队作业五:团队项目需求改进与系统设计

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握面向对象需求分析方法:(2)学习软件系统总体结构和数据库逻辑结构设计,学 ...

  6. 读取Excel数据到DataTable

    读取Excel数据到DataTable 代码 /// <summary> /// 获取指定路径.指定工作簿名称的Excel数据:取第一个sheet的数据 /// </summary& ...

  7. javascript权威指南第14章 表单脚本示例代码

    HTML部分 <!DOCTYPE html> <html> <head> <title></title> </head> < ...

  8. PHP基础语法之 三元运算符和其它运算符

    三元运算符和其它运算符 此外还有一些特殊的运算符和符号,我们再来进行讲解.可能以后我们需要用到.直线电机选型 符号 说明 $x? 真代码段:假代码段 判断是否为真假 ? 真情况 : 假情况; ``(反 ...

  9. 009——C#全局变量定义

    (一)窗体二定义,static静态 public static byte[] waveform_data = { }; // 数据,在串口接收中变化 public static bool wavefo ...

  10. 对url路径中的参数进行加密--Java

    需求: 后台对一些比较敏感的参数进行数据加密,然后在传送到前端.当前端跳转到后台时,再由后台对其进行解密. 参考 针对url参数的加密解密算法(java版) 修改:对中间的js页面加密代码改写为jav ...