前言

最近在生产环境上发现了临时目录堆积吃掉大量磁盘的问题,最终原因是代码有Bug,异常后未执行delete file的代码或者执行了,但是删除失败。

解决思路

  1. 将删除文件的代码放到finally块中。
  2. 确保删除的文件未被使用。

例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
String fdfsPath = null;
String dataHash = null;
String tmpPath = tmpDir + "/" + Tools.getUUID32() + ".json";
File tmpFile = new File(tmpPath);
try {
  FileUtil.writeUtf8String(hoJson.getJSONObject("data").toJSONString(), tmpFile);
  fdfsPath = fastDFSUtil.upload(tmpFile);
  dataHash = ManUtil.getSM3Str(FileUtil.readUtf8String(tmpFile)).toLowerCase();
}catch (Exception e){
  throw e;
}finally {
  //清理掉临时文件  确保能够执行,不然会导致临时文件堆积
  boolean b = FileUtil.del(tmpFile);
  logger.debug("删除临时文件" + tmpPath +" = " +b);
}