问题背景
- 接手公司16年前服务,服务运行一段时间后便会报错,以下为问题日志:

- 查看服务进程
ps -ef | grep java
- 查看打开的文件
lsof -p PID
- 修改完成可以使用该命令查看文件数是否增长
ls -l /proc/PID/fd | wc -l
问题分析与解决
问题根本原因就是代码问题,导致打开的文件太多,解决思路:
- 使用上述命令查看打开文件名
- 代码中全局搜索该文件
- 分析代码多次打开指定文件的原因进行修改。代开文件多次的原因:
我遇到的问题是前人在静态方法中获取文件流,服务中大量频繁调用该静态方法
对象不是单例模式,导致每次实例化对象都会打开文件