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. mysql(函数,存储过程,事务,索引)

    函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...

  2. thefuck安装和使用(ubuntu)

    系统环境(已测试可用): ubuntu 18.04 lts (server或desktop),ubuntu 19.04(server或desktop) sudo apt update sudo apt ...

  3. Windows 网络凭证

    前言 单位内部,员工之间电脑免不了要相互访问(eg:访问共享文件夹).这就引出网络凭证的概念,即你用什么身份访问对端计算机. 实验环境 创建共享文件夹 WinSrv 2008上新建的文件夹shared ...

  4. DNS服务——服务端 和 客户端 配置

    参考:Linux下DNS主从服务器搭建详解 前言 电脑经常会出现一些网络小毛病.有的时候,QQ能正常上网,但是网页却打不开.这种时候十有八九是DNS出问题了. QQ在DNS不可用的时候,可以跳过DNS ...

  5. kubernetes集群初始化(二)

    参考地址:https://github.com/unixhot/salt-kubernetes 一.系统初始化 1.1.安装docker 所有节点都安装docker,设置docker国内yum源 [r ...

  6. jQuery实现点击复制效果

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  7. git如何利用分支进行多人开发

    在使用git时,假如远程仓库有 dev 和 master 两个分支,master 作为一个稳定版分支,可用于直接发布产品,日常的开发则 push 到 dev 分支,那本地是不是要从 dev 分支中创建 ...

  8. MySQL Navicat Premium 保存sql语句

    一.新建查询 二.编写sql语句并保存 1.保存到内部 1.Ctrl+s保存当前查询文件 2.下次打开可点击查询点击上次保存的查询文件名打开上次查询的文件 2.保存到外部 1.默认保存至 C:\Use ...

  9. Vue全家桶之——Vuex

    Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vu ...

  10. python线程池及其原理和使用

    python线程池及其原理和使用 2019-05-29 17:05:20 whatday 阅读数 576 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很 ...