配置项作用 #
monitor.fs.refresh_interval 配置项用于控制文件系统信息(FsInfo)监控数据的缓存刷新间隔。
此配置决定了 FsService 多久刷新一次文件系统信息,包括磁盘使用情况、IO 统计等数据。通过缓存机制减少频繁的文件系统查询。
配置项属性 #
- 配置路径:
monitor.fs.refresh_interval - 数据类型:
TimeValue(时间值) - 默认值:
1s(1秒) - 最小值:
1s(1秒) - 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 否(需要重启节点生效)
配置项详解 #
工作机制 #
FsInfo 缓存刷新机制
FsInfoCache (SingleObjectCache):
├── 刷新间隔: refresh_interval (默认 1s)
├── 缓存对象: FsInfo (磁盘使用、IO 统计等)
└── 刷新策略: scheduleWithFixedDelay
刷新流程:
上次刷新
│
↓ 等待 refresh_interval
│
↓
触发本次刷新
│
├── 调用 fsProbe.stats()
│ ├── 获取磁盘使用量
│ ├── 获取磁盘可用空间
│ ├── 获取 IO 统计信息
│ └── 获取文件系统路径
│
├── 更新缓存
│
└── 下次请求使用新缓存
│
↓ 检查完成
↓
等待 refresh_interval
│
↓ (循环)
示例 (refresh_interval = 1s):
00:00.000 ──→ 缓存刷新 1
00:00.100 ──→ 请求 FsInfo → 使用缓存 1 ✅
00:00.500 ──→ 请求 FsInfo → 使用缓存 1 ✅
00:01.000 ──→ 缓存刷新 2
00:01.100 ──→ 请求 FsInfo → 使用缓存 2 ✅
...
与 always_refresh 的关系 #
缓存强制刷新机制
monitor.fs.always_refresh = false (默认):
├── 使用 refresh_interval 缓存
├── 减少文件系统查询
└── 性能更好 ✅
monitor.fs.always_refresh = true:
├── 忽略 refresh_interval
├── 每次请求都重新查询
└── 实时性最高,但性能较低 ❌
FsInfo 包含的信息 #
FsInfo 监控数据
磁盘使用信息:
├── total: 总磁盘空间
├── available: 可用空间
├── used: 已用空间
└── uses_percent: 使用百分比
IO 统计信息:
├── disk_reads: 读操作次数
├── disk_writes: 写操作次数
├── disk_read_bytes: 读取字节数
└── disk_write_bytes: 写入字节数
路径信息:
├── path: 数据路径
├── mount: 挂载点
└── type: 文件系统类型
配置建议 #
生产环境(默认) #
monitor:
fs:
refresh_interval: 1s # 默认值
建议: 保持默认值 1s。快速响应文件系统变化。
减少刷新频率 #
monitor:
fs:
refresh_interval: 5s # 减少刷新
建议: 设置为 5-10s。稳定的文件系统,减少系统开销。
极低刷新频率 #
monitor:
fs:
refresh_interval: 30s # 极低频率
建议: 设置为 30-60s。非常稳定的系统,最低开销。
实时监控 #
monitor:
fs:
refresh_interval: 1s
always_refresh: true # 强制实时
建议: 需要完全实时监控时使用。
代码示例 #
easysearch.yml 基础配置 #
monitor:
fs:
refresh_interval: 1s
标准生产配置 #
monitor:
fs:
refresh_interval: 1s
低开销配置 #
monitor:
fs:
refresh_interval: 10s
实时监控配置 #
monitor:
fs:
refresh_interval: 1s
always_refresh: true
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
monitor.fs.refresh_interval | FsInfo 刷新间隔 | 1s |
monitor.fs.always_refresh | 是否强制每次刷新 | false |
monitor.fs.health.refresh_interval | 健康检查间隔 | 120s |
性能影响分析 #
| refresh_interval 设置 | 优点 | 缺点 |
|---|---|---|
| 1s(默认) | 快速响应 | 较高系统调用 |
| 5s | 平衡响应和开销 | 标准设置 |
| 10s | 低系统调用 | 响应延迟 |
| 30s+ | 最低系统调用 | 延迟较大 |
系统调用对比 #
不同间隔的系统调用频率
refresh_interval = 1s:
├── 每分钟调用: 60 次 statfs()
├── 系统开销: 中等
└── 数据延迟: 最多 1 秒
refresh_interval = 5s:
├── 每分钟调用: 12 次 statfs()
├── 系统开销: 低
└── 数据延迟: 最多 5 秒
refresh_interval = 10s:
├── 每分钟调用: 6 次 statfs()
├── 系统开销: 很低
└── 数据延迟: 最多 10 秒
refresh_interval = 30s:
├── 每分钟调用: 2 次 statfs()
├── 系统开销: 极低
└── 数据延迟: 最多 30 秒
使用场景 #
推荐使用默认值的场景 #
- 动态环境: 文件系统使用变化频繁
- 快速响应: 需要快速检测磁盘空间变化
- 标准监控: 标准的监控需求
推荐增加间隔的场景 #
- 稳定环境: 文件系统使用稳定
- 减少开销: 希望减少系统调用
- 长期监控: 不需要秒级响应
- 资源受限: 系统资源紧张
推荐使用 always_refresh 的场景 #
- 关键应用: 磁盘空间非常关键
- 实时性: 需要完全实时的数据
- 监控工具: 配合外部监控工具使用
与健康检查的对比 #
两种刷新机制的区别
FsInfo 刷新 (monitor.fs.refresh_interval):
├── 默认: 1s
├── 作用: 刷新磁盘使用、IO 统计等数据
├── 频率: 高频刷新
├── 开销: 较低
└── 用途: 提供监控数据
健康检查 (monitor.fs.health.refresh_interval):
├── 默认: 120s
├── 作用: 实际创建/删除文件测试写入能力
├── 频率: 低频检查
├── 开销: 较高
└── 用途: 确保文件系统健康
两者配合:
├── FsInfo: 提供数据(高频)
└── Health: 确保健康(低频)
数据延迟分析 #
监控数据的延迟
refresh_interval = 1s (默认):
00:00.000 ──→ 磁盘使用 80%
00:00.500 ──→ 磁盘使用 85% (实际发生)
00:00.800 ──→ 查询 → 返回 80% (缓存)
00:01.000 ──→ 缓存刷新 → 获取到 85%
00:01.100 ──→ 查询 → 返回 85% ✅
延迟: 最多 1 秒
refresh_interval = 10s:
00:00.000 ──→ 磁盘使用 80%
00:00.500 ──→ 磁盘使用 85% (实际发生)
00:05.000 ──→ 查询 → 返回 80% (缓存)
00:10.000 ──→ 缓存刷新 → 获取到 85%
00:10.100 ──→ 查询 → 返回 85% ✅
延迟: 最多 10 秒
注意事项 #
默认值: 默认值为
1s,适合大多数场景。需要重启: 修改此配置需要重启节点。
最小值: 最小值为
1s,不能设置更小。缓存机制: 使用缓存减少系统调用。
always_refresh: 设置后会忽略此配置。
与健康检查区分: 与健康检查是不同的机制。
系统调用: 刷新会调用 statfs() 等系统调用。
监控建议: 根据监控需求选择间隔。
测试验证: 配置变更后应验证监控效果。
稳定环境: 稳定环境可以适当增加间隔。
FsProbe 实现 #
文件系统探测接口
FsProbe 接口:
├── stats(): 获取 FsInfo
├── 跨平台实现
└── 返回统一数据格式
Linux 实现:
├── 读取 /proc/mounts
├── 调用 statfs() 系统调用
└── 读取 /proc/diskstats
Windows 实现:
├── 调用 GetDiskFreeSpaceEx()
└── 调用 GetDriveType()





