📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

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_intervalOS 统计刷新间隔1s
monitor.jvm.refresh_intervalJVM 统计刷新间隔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. 运维监控
   ├── 检查文件描述符泄漏
   ├── 检查进程资源使用
   └── 问题诊断