Linux中Too many open files 问题分析和解决

原创
2020/07/18 15:08
阅读数 313
[WARN ] 2018-06-15 16:55:20,831 --New I/O server boss #1 ([id: 0x55007b59, /0.0.0.0:20880])-- [org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink]  [DUBBO] Failed to accept a connection., dubbo version: 2.8.3.2, current host: 127.0.0.1 
java.io.IOException: Too many open files
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.7.0_09-icedtea]
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:226) ~[na:1.7.0_09-icedtea]
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(NioServerSocketPipelineSink.java:244) ~[netty-3.2.5.Final.jar:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_09-icedtea]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_09-icedtea]
        at java.lang.Thread.run(Thread.java:722) [na:1.7.0_09-icedtea]

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

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

 

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

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

ulimit –a

还可以设置某个进程的句柄数上限,这个战士的信息更多,命令是:

ulimit –a PID

https://blog.csdn.net/lkforce/article/details/80710459

参考如上博客

lsof  list open file的缩写

但是最终都不是,是内存不够的原因。free -g 

如果内存用完了,这个swap会当做内存使用,不过服务会卡顿。

如上只是提供解决思路,服务器上不方便截图。15个人,选中文件夹的时候,可能一个人需要加载100张图片,高峰的时候,java 服务会访问上千张。这个也和内存有很大关系。,服务器上内存只有3G。

df -h 查看磁盘使用情况。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部