You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 8.5.64运行时删除tomcat/temp下旧.tmp文件是否安全?

问题解决:Tomcat Temp目录自动清理失效的处理方案

问题背景

我们的Tomcat服务器tomcat/temp目录自带的自动清理功能失效,导致磁盘空间被占满。这些占用空间的临时文件均来自用户文件上传操作,且留存超过两天的旧临时文件已无使用价值。

处理思路

实现一个每两天执行一次的定时任务,主动清理目标目录:

  • 仅针对.tmp文件执行删除操作,规避误删tomcat.pid等非临时文件的风险
  • 尽管通常服务器关闭时清理temp目录是绝对安全的方案,但考虑到旧临时文件已无用处,选择在Tomcat运行期间定向清理过期.tmp文件,平衡空间释放需求与运行安全

Java 8 实现代码

public static void removeAllTemporaryFiles(TempFilePaths chosenFilePath) {
  Date ageLimit = DateHelper.addToDate(DateHelper.today(), -2, TimeUnit.DAYS);
  String filePath = null;
  IOFileFilter fileFilter = null;
  switch (chosenFilePath){
    // 其他分支
    case TOMCATTEMP:
      filePath = PathMapper.getInstance().getPath("tomcatTemp", "unknown").toString();
      fileFilter = new AndFileFilter(new AgeFileFilter(ageLimit, true), new WildcardFileFilter("*.tmp"));
      break;
    // 其他分支
  }

  if (FileHelper.exists(filePath)) {
    Collection<File> filesToDelete = FileUtils.listFiles(new File(filePath), fileFilter, TrueFileFilter.INSTANCE);
    int numberOfFilesToBeDeleted = filesToDelete.size();
    int filesDeletedCounter = 0;
    for (File fileObject : filesToDelete) {
      try {
        fileObject.delete();
        filesDeletedCounter++;
      } catch (Exception e) {
        log.error(e);
      }
    }
    log.info("Temporary files deleted @ " + filePath + ": " + filesDeletedCounter + "/" + numberOfFilesToBeDeleted);
  }
}

代码说明

  1. 过滤规则:通过AndFileFilter组合两个过滤器,精准筛选出修改时间早于两天前的.tmp文件
  2. 路径配置:借助PathMapper动态获取Tomcat Temp目录路径,提升代码的配置灵活性
  3. 异常处理:遍历删除文件时捕获异常,避免单个文件删除失败导致整个任务终止,同时记录清理日志便于后续排查

内容的提问来源于stack exchange,提问作者snek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:00:58