详解 Too many open files
程序经常访问的文件、socket在Linux中都是文件file,系统需要记录每个当前访问file的name、location、access authority等相关信息,这样的一个实体被称为file entry。“open files table”(图中橙色标识)存储这些file entry,以数组的形式线性管理。文件描述符(file descriptor)作为进程到open files table的指针,也就是open files table的下标索引,将每个进程与它所访问的文件关联起来了。
每个进程中都有一个file descriptor table管理当前进程所访问(open or create)的所有文件,文件描述符关联着open files table中文件的file entry。细节不表,对于open files table能容纳多少file entry。Linux系统配置open files table的文件限制,如果超过配置值,就会拒绝其它文件操作的请求,并抛出Too many open files异常。这种限制有系统级和用户级之分。
系统级:
系统级设置对所有用户有效。可通过两种方式查看系统最大文件限制
1 cat /proc/sys/fs/file-max
2 sysctl -a 查看结果中fs.file-max这项的配置数量
如果需要增加配置数量就修改/etc/sysctl.conf文件,配置fs.file-max属性,如果属性不存在就添加。
配置完成后使用sysctl -p来通知系统启用这项配置
用户级:
Linux限制每个登录用户的可连接文件数。可通过 ulimit -n来查看当前有效设置。如果想修改这个值就使用 ulimit -n <setting number> 命令。
对于文件描述符增加的比例,资料推荐是以2的幂次为参考。如当前文件描述符数量是1024,可增加到2048,如果不够,可设置到4096,依此类推。
在出现Too many open files问题后,首先得找出主要原因。最大的可能是打开的文件或是socket没有正常关闭。为了定位问题是否由Java进程引起,通过Java进程号查看当前进程占用文件描述符情况:
- lsof -p $java_pid 每个文件描述符的具体属性
- lsof -p $java_pid | wc -l 当前Java进程file descriptor table中FD的总量
分析命令的结果,可判断问题是否由非正常释放资源所引起。
详解 Too many open files相关推荐
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- 基于php下载文件的详解
基于php下载文件的详解 本篇文章是对php下载文件进行了详细的分析介绍,需要的朋友参考下 php下载文件,比如txt文件. 出现的效果就是,弹出浏览器自带的下载框,出现另存为操作.有时候会出现内存溢 ...
- oracle home 命令,$ORACLE_HOMEbin目录下所有命令的使用方法及命令详解
求$ORACLE_HOME/bin目录下所有命令的使用方法及命令详解 如题. $ORACLE_HOME/bin目录下有很多命令,那我们平时用到的也不是太多,即使用到的那部分可能用法也不是完全能掌握,所 ...
- python修改文件内容_Python批量修改文本文件内容的方法详解
这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...
- OpenCV 畸变校正函数undistortPoints()与remap()详解及校正效果对比
一.概述 前面写过一篇博客–"疑问:undistortPoints()与remap()畸变校正后,结果相差很大",博客中对比了OpenCV中自带畸变校正函数undistortPoi ...
- ATS程序功能和使用方法详解
转载自https://blog.zymlinux.net/index.php/archives/374 Apache Traffic Server的程序文件,与传统的服务器系统有大不同,这里我们将会对 ...
- Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解
文章目录 前言 Rocksdb写流程图 WAL 原理分析 概述 文件格式 查看WAL的工具 创建WAL 清理WAL MANIFEST原理分析 概述 查看MANIFEST的工具 创建 及 清除 MANI ...
- CI流水线配置文件参数详解(一)
文章目录 4. 参数详解(一) 4.1 ``script`` 4.2 ``image`` 指定使用Docker镜像.如 ``iamge:name`` ,暂时忽略. 4.3 ``before_scrip ...
- 【SVN】linux下svn命令参数详解(二)
svn全部子命令详解 1.svn help 2.svn add 3.svn blame 4.svn cat 5.svn changelist 6.svn checkout 7.svn cleanup ...
最新文章
- 推荐阅读《赢在下班后》
- 【转】使用Apache Kylin搭建企业级开源大数据分析平台
- relation does not exist报错是什么意思_为什么Zookeeper天生就是一副分布式锁的胚子?...
- CF401C-Team【构造】
- sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
- Hades:移动端静态分析框架
- [国嵌笔记][025][ARM指令分类学习]
- dockerfile 创建自定义的tomcat服务
- [bzoj1497][NOI2006]最大获利_网络流_最小割
- C++虚函数调用的反汇编解析
- 关于网站版权声明(Copyright)的格式和写法
- python基础之语句_python基础之条件语句
- 使用Zbar进行二维码识别 中文字符解码 RawBytes
- SHOPNC 插件机制的实现记录
- IT人职业道德的反思
- Maven(保姆级全详)新手入门
- 嵌入式:ARM中断系统设计全解
- Ubuntu 18.04 ———(Intel RealSense D435i)安装相机的驱动librealsense + realsense-ros
- 百度提示:违法违规网页,建议关闭的解决方案
- 【自然语言处理】潜在语义分析【下】概率潜在语义分析