运行在Linux系统上的Java程序可能会出现"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的总量
分析命令的结果,可判断问题是否由非正常释放资源所引起。
- 大小: 25.7 KB
分享到:
相关推荐
window_open详解window_open详解window_open详解
Yolov7详解及openvino部署
many-to-one 配置详解 讲的很清楚 适合新手 值得下载
VB-Open-函数详解
主要介绍了adodb.recordset.open(rs.open)方法参数详解,需要的朋友可以参考下
本文来自网站-OPEN经验库-Git详解: http://www.open-open.com/lib/view/open1328069609436.html 作者以自己对git的深刻理解,以图文的形式通俗易懂地介绍了git的使用方式和工作原理。从中可以看出作者对git的很深...
open Euler 欧拉操作系统生态详解.pptx
window.open参数详解,这是js中新建页面时常用到的属性及方法
Window.open ('page.html') 用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以,只是不要混用。 这一段代码...
“too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太多,上限是500条。超出会报错。 解决方案就是只好分多次插入数据库了。 ...
window.open参数详解.txt
IPv6详解IPv6详解IPv6详解IPv6详解IPv6详解IPv6详解IPv6详解IPv6详解
SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解SEO详解
IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解
OpenDRIVE® is an open file format for the logical description of road networks. It was developed and is being maintained by a team of simulation professionals with large support from the simulation ...
OpenCore的另外一个常用的称呼是PacketVideo,它是Android的多媒体核心。这个文件就是详解该部分
Spring MVC 框架搭建及详解 - OPEN 开发经验库.htm
OpenXLSX 读写Excel表格。 支持VS2019编译,C++MFC应用示例,l
js中widow.open()方法使用详解.docx
南瑞OPEN-3000 SCADA子系统 设计原理与功能详解