linux too many files
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的更多相关文章
- 如何处理错误消息Please install the Linux kernel header files
Please install the Linux kernel "header" files matching the current kernel 当我启动minilkube时遇 ...
- 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 ...
- linux修改open files数
概要 linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...
- linux extract rar files
Extract rar-archives If you need to extract rar files in Linux, you have to download and install unr ...
- [转载]linux修改open files数
概要:linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...
- Linux recursively find files
https://stackoverflow.com/questions/5905054/how-can-i-recursively-find-all-files-in-current-and-subf ...
- Symantec Backup Exec 2012 Agent For Linux安装
Backup Exec 2012 介绍 Backup Exec 2012 是一种为虚拟和物理环境提供保护的集成产品,能够简化备份和灾难恢复,并提供了无可匹敌的恢复功能.借助于强大的 Symantec ...
- Linux 下应用程序最大打开文件数的理解和修改
运行在Linux系统上的Java程序运行了一段时间后出现"Too many open files"的异常情况. 这种情况常见于高并发访问文件系统,多线程网络连接等场景.程序经常访问 ...
- 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 ...
随机推荐
- 【前端开发】】js中var写和不写的区别
js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...
- lumen生成key
在Lumen控制台运行php artisan key:generate提示: $ php artisan key:generate [Symfony\Component\Console\Excepti ...
- springboot系列(七) 项目热加载
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...
- Flutter——消息框(Fluttertoast)
引入依赖: dependencies: fluttertoast: ^3.1.3 import 'package:flutter/material.dart'; import 'package:flu ...
- C++——构造函数 constructor
What is constructor C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor; construc ...
- python2.7 安装pycrypto库报错
windows + python2.7 先安装VC包 https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59 ...
- windows10下安装tensorflow2.0-GPU和Cupy(不用搞CUDA+cudnn)
0.前言 今年暑假买了个1660ti的游戏本学python,后来发现跑一些数据量比较大的代码和深度学习的时候太慢了,遂想装一下GPU版本,看了网上的资料搞了好几天,又是CUDA又是cudnn的,网速慢 ...
- MyBatis3-topic-01 -安装/下载/官方文档 -执行输入一条已经映射的sql语句
mybatis XML 映射配置文件 (官方文档) -对象工厂(objectFactory) -配置环境(environments) -映射器(mappers) 本地IDEA搭建/测试步骤 创建数据库 ...
- JDBC课程2--实现Statement(用于执行SQL语句)--使用自定义的JDBCTools的工具类静态方法,包括insert/update/delete三合一
/**JDBC课程2--实现Statement(用于执行SQL语句) * 1.Statement :用于执行SQL语句的对象: * 1): 通过Connection 的createStatement( ...
- windows平台RSA密钥生成
1.安装openssl工具 下载安装openssl工具,执行安装目录bin下的"openssl.exe",执行后会弹出命令窗口. 2.生成私钥 在命令窗口输入“genrsa -ou ...