1. 场景:
使用javacv将rtsp流转为flv,服务跑几天后报错。
2022-01-20 09:32:41.214 [http-nio-9145-Acceptor-0] ERROR org.apache.tomcat.util.net.NioEndpoint - Socket accept failed
java.io.IOException: 打开的文件过多
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[?:1.8.0_11]
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241) ~[?:1.8.0_11]
at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:482) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_11]
2.定位问题:
- 先查出服务进程
ps -ef |grep converter-flv-2.0.5.RELEASE.jar
- 使用命令lsof查出当前服务打开文件数
lsof -p 2194 |wc -l
如果找不到命令则安装:yum install lsof
- 查看用户允许打开的最大文件数
ulimit -a 发现open files 为1024往往服务打开的文件数大于该值就会报错。
3. 解决方案
执行:ulimit -n 4096
将open files (-n) 1024 设置成open files (-n) 4096