可通过 Files.getFileStore() 获取挂载点对应的 FileStore 实例,再调用 getUsableSpace() 获取可用空间。
可以通过 files.getfilestore() 获取挂载点对应的 filestore 实例,再调用其 getusablespace()、 等方法计算使用率,实现轻量级磁盘水位监控与预警。关键在于定期采样 + 合理阈值判断 + 非阻塞告警触发。
获取指定挂载点的 FileStore 实例
Java 7+ 的 Files.getFileStore(Path) 要求传入该挂载点下的任意一个**已存在的、可访问的路径**(如根目录或某子目录),不能直接传挂载点字符串(如 /data)就保证成功——需确保路径存在且 JVM 有读权限。
- 推荐用挂载点根路径(如
Paths.get("/data")),并提前检查Files.exists()和Files.isReadable() - 若路径不存在或无权限,会抛
IOException,需捕获处理,避免监控中断 - 注意:Linux 下不同挂载点可能对应同一设备(如 bind mount),
FileStore是按底层文件系统实例区分,不是按路径字面量
计算磁盘使用率并设置预警阈值
FileStore 提供三个核心空间值(单位均为字节):
-
getTotalSpace():总容量(格式化后大小) -
getUsableSpace():非 root 用户可用剩余空间(推荐用于预警,更贴近应用实际可用量) -
getUnallocatedSpace():未分配空间(含保留块,一般不用作水位依据)
使用率建议按 (total - usable) / total 计算,并设置分级阈值,例如:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- ≥ 85% → 警告(WARN)
- ≥ 92% → 严重(ERROR)
- ≥ 95% → 危急(CRITICAL),可触发自动清理或通知运维
实现周期性监控与线程安全采集
不建议在主线程中轮询,应使用独立调度线程(如 ScheduledExecutorService)定期执行,避免阻塞业务逻辑。
- 采样间隔建议 30 秒~5 分钟,太短增加 I/O 开销,太长降低预警时效性
- 每次采集应尽量快(
FileStore方法是本地系统调用,通常毫秒级),避免加锁或复杂计算 - 若监控多个挂载点,可复用同一个调度器,每个任务独立 try-catch,单点失败不影响其他
集成简单告警(日志 + 可选外部通知)
达到阈值时,优先记录带上下文的日志(含挂载点、当前使用率、时间戳),便于排查;进阶可对接邮件、企业微信、Prometheus Pushgateway 等。
- 日志示例:[DISK-WARN] /data usage=87.3%, threshold=85%, time=2024-06-15T14:22:05Z
- 避免高频刷屏:对同一挂载点,两次告警至少间隔 5 分钟(可用
ConcurrentHashMap缓存上次告警时间) - 恢复通知可选:当使用率回落至阈值以下一定范围(如 ≤ 75%),发一条“已恢复”日志,提升可观测性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










