配置项作用 #
monitor.process.refresh_interval 配置项用于控制进程监控服务收集和刷新进程统计信息的间隔时间。
此配置决定了 ProcessService 多久刷新一次进程级别指标,包括打开的文件描述符、CPU 使用率、内存使用等。
配置项属性 #
- 配置路径:
monitor.process.refresh_interval - 数据类型:
TimeValue(时间值) - 默认值:
1s(1秒) - 最小值:
1s(1秒) - 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 否(需要重启节点生效)
配置项详解 #
工作机制 #
ProcessStats 缓存刷新机制
ProcessStatsCache (SingleObjectCache):
├── 刷新间隔: refresh_interval (默认 1s)
├── 缓存对象: ProcessStats
└── 刷新策略: 按需检查 + 缓存
获取流程:
调用 processStats()
│
↓
检查距离上次刷新时间
│
├──── 超过 refresh_interval
│ │
│ ↓
│ 重新获取进程统计信息
│ ├── 打开的文件描述符
│ ├── CPU 使用率
│ ├── 内存使用
│ └── 更新缓存
│
└──── 未超过 refresh_interval
│
↓
返回缓存数据 ✅
进程统计信息内容 #
ProcessStats 包含的信息
1. 进程信息
├── 进程 ID (PID)
├── 父进程 ID (PPID)
├── 进程名称
└── 命令行参数
2. 文件描述符
├── 打开的文件描述符数量
└── 文件描述符限制
3. CPU 使用
├── 用户空间 CPU 时间
├── 系统空间 CPU 时间
└── CPU 使用率
4. 内存使用
├── 虚拟内存大小
├── 驻留集大小 (RSS)
├── 内存使用百分比
└── 内存限制
5. 时间信息
├── 总 CPU 时间
└── 启动时间
与其他监控的关系 #
各种刷新间隔的配合
monitor.process.refresh_interval:
├── 作用: 进程监控
├── 默认: 1s
└── 数据: 文件描述符、CPU、内存
monitor.jvm.refresh_interval:
├── 作用: JVM 监控
├── 默认: 1s
└── 数据: 堆内存、线程、GC
monitor.os.refresh_interval:
├── 作用: 操作系统监控
├── 默认: 1s
└── 数据: CPU、内存、负载
协同工作:
├── 独立配置
├── 独立缓存
├── 不同层级
└── 完整监控视图
层级关系:
├── OS: 系统级别
├── Process: 进程级别
└── JVM: 应用级别
配置建议 #
生产环境(默认) #
monitor:
process:
refresh_interval: 1s # 默认值
建议: 保持默认值 1s。及时获取进程指标。
减少刷新频率 #
monitor:
process:
refresh_interval: 5s # 减少刷新
建议: 设置为 5-10s。稳定的进程,减少开销。
低频监控 #
monitor:
process:
refresh_interval: 30s # 低频率
建议: 设置为 30-60s。非常稳定的进程使用。
高频监控 #
monitor:
process:
refresh_interval: 1s # 保持最小值
建议: 保持 1s(最小值)。需要最及时数据时使用。
代码示例 #
easysearch.yml 基础配置 #
monitor:
process:
refresh_interval: 1s
标准生产配置 #
monitor:
process:
refresh_interval: 1s
低开销配置 #
monitor:
process:
refresh_interval: 10s
完整监控配置 #
monitor:
os:
refresh_interval: 1s
process:
refresh_interval: 1s
jvm:
refresh_interval: 1s
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
monitor.process.refresh_interval | 进程统计刷新间隔 | 1s |
monitor.os.refresh_interval | OS 统计刷新间隔 | 1s |
monitor.jvm.refresh_interval | JVM 统计刷新间隔 | 1s |
性能影响分析 #
| refresh_interval 设置 | 优点 | 缺点 |
|---|---|---|
| 1s(默认) | 及时数据 | 标准开销 |
| 5s | 低系统调用 | 数据延迟 5s |
| 10s | 很低系统调用 | 数据延迟 10s |
| 30s+ | 最低系统调用 | 数据延迟大 |
系统调用对比 #
不同间隔的系统调用频率
refresh_interval = 1s:
├── 每分钟调用: 60 次
├── 单次开销: ~0.2ms
└── 每分钟开销: ~12ms (0.02%)
refresh_interval = 5s:
├── 每分钟调用: 12 次
├── 单次开销: ~0.2ms
└── 每分钟开销: ~2.4ms (0.004%)
refresh_interval = 10s:
├── 每分钟调用: 6 次
├── 单次开销: ~0.2ms
└── 每分钟开销: ~1.2ms (0.002%)
refresh_interval = 30s:
├── 每分钟调用: 2 次
├── 单次开销: ~0.2ms
└── 每分钟开销: ~0.4ms (0.001%)
使用场景 #
推荐使用默认值的场景 #
- 生产环境: 大多数生产环境
- 实时监控: 需要即时的进程指标
- 标准应用: 正常的应用部署
- 监控工具: 配合监控工具使用
推荐增加间隔的场景 #
- 稳定进程: 进程状况稳定
- 减少开销: 希望减少系统调用
- 长期运行: 长期运行的服务
- 资源受限: 系统资源紧张
推荐保持最小值的场景 #
- 性能调优: 正在进行性能优化
- 问题排查: 排查进程问题
- 监控密集: 需要密集监控
- 测试环境: 测试环境使用
文件描述符监控 #
文件描述符的重要性
文件描述符数量:
├── 反映进程打开的资源
├── 包括:
│ ├── 打开的文件
│ ├── 网络连接
│ ├── 管道
│ └── 套接字
└── 有限制: ulimit -n
监控意义:
├── 接近限制 → 需要关注 ⚠️
├── 持续增长 → 可能有泄漏 ❌
└── 突然增加 → 异常活动
处理建议:
├── 检查未关闭的连接
├── 检查未关闭的文件
├── 调整 ulimit 限制
└── 检查代码逻辑
数据延迟分析 #
监控数据的延迟
refresh_interval = 1s (默认):
00:00.000 ──→ 文件描述符 100
00:00.500 ──→ 文件描述符 500 (实际变化)
00:00.800 ──→ 查询 → 返回 100 (缓存)
00:01.001 ──→ 缓存刷新 → 获取到 500
00:01.100 ──→ 查询 → 返回 500 ✅
延迟: 最多 1 秒
refresh_interval = 10s:
00:00.000 ──→ 文件描述符 100
00:00.500 ──→ 文件描述符 500 (实际变化)
00:05.000 ──→ 查询 → 返回 100 (缓存)
00:10.001 ──→ 缓存刷新 → 获取到 500
00:10.100 ──→ 查询 → 返回 500 ✅
延迟: 最多 10 秒
ProcessProbe 实现 #
进程探测接口
ProcessProbe 接口:
├── processStats(): 获取进程统计信息
├── processInfo(): 获取进程信息
└── 跨平台实现
Linux 实现:
├── 读取 /proc/self/stat
├── 读取 /proc/self/status
├── 读取 /proc/self/fd (文件描述符)
└── sysconf() (系统配置)
Windows 实现:
├── GetProcessMemoryInfo()
├── GetProcessTimes()
├── GetProcessIoCounters()
└── EnumProcessModules()
macOS 实现:
├── proc_pidinfo()
├── proc_listpids()
└── proc_pidfdinfo()
注意事项 #
默认值: 默认值为
1s,适合大多数场景。最小值: 最小值为
1s,不能设置更小。需要重启: 修改此配置需要重启节点。
缓存机制: 使用缓存减少系统调用。
数据延迟: 数据有延迟,不是完全实时。
文件描述符: 重点监控文件描述符数量。
跨平台: 不同 OS 的实现不同。
监控建议: 根据监控需求选择间隔。
测试验证: 配置变更后应验证监控效果。
合理设置: 稳定环境可以适当增加间隔。
API 使用场景 #
processStats() 的调用场景
1. Nodes Stats API
GET /_nodes/stats/process
├── 调用 processStats()
└── 返回进程统计信息
2. CAT API
GET /_cat/nodes
├── 显示文件描述符
└── 显示 CPU 使用率
3. 监控工具
├── Prometheus Exporter
├── Metricbeat
└── 其他监控工具
├── 定期调用 processStats()
└── 收集进程指标
4. 运维监控
├── 检查文件描述符泄漏
├── 检查进程资源使用
└── 问题诊断





