--- title: "进程监控刷新间隔配置" date: 2026-03-06 lastmod: 2026-03-06 description: "monitor.process.refresh_interval 配置项用于控制进程监控统计信息的刷新间隔。" tags: ["监控", "进程", "资源使用", "性能监控"] summary: "配置项作用 # 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." --- ## 配置项作用 `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: 应用级别 ``` ## 配置建议 ## 生产环境(默认) ```yaml monitor: process: refresh_interval: 1s # 默认值 ``` **建议**: 保持默认值 `1s`。及时获取进程指标。 ## 减少刷新频率 ```yaml monitor: process: refresh_interval: 5s # 减少刷新 ``` **建议**: 设置为 `5-10s`。稳定的进程,减少开销。 ## 低频监控 ```yaml monitor: process: refresh_interval: 30s # 低频率 ``` **建议**: 设置为 `30-60s`。非常稳定的进程使用。 ## 高频监控 ```yaml monitor: process: refresh_interval: 1s # 保持最小值 ``` **建议**: 保持 `1s`(最小值)。需要最及时数据时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml monitor: process: refresh_interval: 1s ``` ## 标准生产配置 ```yaml monitor: process: refresh_interval: 1s ``` ## 低开销配置 ```yaml monitor: process: refresh_interval: 10s ``` ## 完整监控配置 ```yaml 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() ``` ## 注意事项 1. **默认值**: 默认值为 `1s`,适合大多数场景。 2. **最小值**: 最小值为 `1s`,不能设置更小。 3. **需要重启**: 修改此配置需要重启节点。 4. **缓存机制**: 使用缓存减少系统调用。 5. **数据延迟**: 数据有延迟,不是完全实时。 6. **文件描述符**: 重点监控文件描述符数量。 7. **跨平台**: 不同 OS 的实现不同。 8. **监控建议**: 根据监控需求选择间隔。 9. **测试验证**: 配置变更后应验证监控效果。 10. **合理设置**: 稳定环境可以适当增加间隔。 ## API 使用场景 ``` processStats() 的调用场景 1. Nodes Stats API GET /_nodes/stats/process ├── 调用 processStats() └── 返回进程统计信息 2. CAT API GET /_cat/nodes ├── 显示文件描述符 └── 显示 CPU 使用率 3. 监控工具 ├── Prometheus Exporter ├── Metricbeat └── 其他监控工具 ├── 定期调用 processStats() └── 收集进程指标 4. 运维监控 ├── 检查文件描述符泄漏 ├── 检查进程资源使用 └── 问题诊断 ```