1、项目部署在linux渲舫蒇芘服务器上,已经运行一个多月,突然收到报警邮件,一个下载任务报Too many open files 异常,一开始就以为是下载文件太多,服棣蚺幌盗务器空间不足,后来查,是linux服务器句柄泄露,句柄数量太少了? 按照步骤将服务器句柄数值设置大一些,但是过了一段时间依旧报错。
2、那么开始考虑工程代码问题,从根源上解决问题,查看该项目对应进程的句柄有多少,发现在持续上升,速度一点也不慢。
3、将代码中 inputStream, outputStream 加上 flush(), close(); 重新部署提交,结果,发现,对应进程的句柄依旧在增加,且是zip文件
4、那把zip文件删掉? 试试看,重新部署,溽朽孑臾查看进程对应的句柄数量,发现,还在增加,但是句柄详细里面 zip(delete),多了个小括号 delete,文件都删除了还在占用?
5、细扒代码,发现,zip文件当成File 传入后,又重新建了一个ZipFile类型的文件对其进行处理,虽然File 类对象不亟冁雇乏需要close,但是ZipFil文件 可以close掉的,所以加了zipFile.close(); 一行代码。
6、重新部署,再次查看,完美,句柄数量即使增加后,会释放,正常不下载时数值稳定,不再持续增加