1. SLI 与数据采集稳定性概述

1.1 什么是 SLI(服务等级指标)

SLI(Service Level Indicator,服务等级指标)是衡量系统或服务某一维度性能与可靠性的量化度量值。在数据采集场景中,SLI 直接反映采集管道是否按预期交付数据。

SLI 类别 典型指标 采集场景含义
可用性 采集进程存活率、API 响应成功率 Collector 是否持续运行,无崩溃或挂起
延迟 P50/P99 采集耗时、数据入队延迟 从数据到达 Collector 到完成处理的时间
吞吐量 每秒采集事件数、每分钟日志行数 单位时间内 Collector 能处理的数据量
完整性 数据丢失率、采样覆盖率 采集到的数据占应采集数据的比例
准确性 字段解析错误率、重复数据比例 采集数据的内容是否与源数据一致
关键认知: SLI 不是静态数字,而是与 SLO(服务等级目标)绑定的可观测信号。当 SLI 持续偏离目标时,说明系统已进入风险区间,需要立即介入调优。

1.2 数据采集稳定性的定义

数据采集稳定性是指 Collector 在长时间、高负载、多变环境下,持续满足 SLI 目标的能力。稳定性不是“不崩溃”这么简单,它包含三个层次:

  • 结构稳定性: 进程不因内存泄漏、死锁、OOM Killer 而异常退出。
  • 性能稳定性: 延迟和吞吐量不随时间推移发生不可逆劣化。
  • 数据稳定性: 不丢数据、不重复、不产生乱序或截断。

一个稳定的采集系统,在 7×24 小时运行中,其核心 SLI 波动应控制在 SLO 容忍范围内,且无需人工重启或重置。

1.3 内存问题对采集稳定性的典型影响

内存是 Collector 最敏感的资源之一。以下表格总结了常见内存问题及其对 SLI 的破坏路径:

内存问题 直接表现 影响的 SLI 典型后果
堆内存泄漏 GC 频率持续上升,Full GC 增多 延迟、吞吐量 采集停顿、请求超时、数据积压
堆外内存泄漏 RSS 持续增长,堆内正常但进程被 OOM Kill 可用性 进程突然消失,采集中断
GC 停顿过长 STW 时间超过采集超时阈值 延迟、完整性 数据写入超时、缓冲区溢出丢数据
内存碎片化 无法分配连续大对象,触发频繁 Full GC 吞吐量、延迟 采集速率下降,CPU 空转在 GC 上
缓冲区膨胀 内存中待发送数据队列无限增长 完整性、可用性 OOM 或数据丢失(被淘汰)
实践警示: 很多采集稳定性事故的根因并非代码逻辑错误,而是内存管理不当。例如,一个未限制大小的 LinkedBlockingQueue 在背压失效时,会迅速耗尽堆内存,导致 Collector 被操作系统 OOM Killer 强制终止,直接破坏可用性 SLI。

1.4 内存问题影响采集稳定性的路径图

下图展示了内存问题如何逐级传导,最终破坏 SLI 目标:

内存问题影响采集稳定性路径图 内存问题源头 堆内存泄漏 / 膨胀 堆外内存泄漏 GC 停顿 / 碎片化 GC 频率飙升 RSS 持续增长 STW 时间超阈值 CPU 空转 / 采集停顿 进程被 OOM Kill 缓冲区溢出 / 丢数据 SLI 破坏:可用性↓ 延迟↑ 吞吐量↓ 完整性↓ SLO 违约 → 采集不可用事故

1.5 内存调优在采集稳定性中的定位

从上述路径图可以清晰看到:内存问题是采集稳定性风险的放大器。一个未优化的 Collector,在低负载下可能表现正常,但一旦流量高峰到来或运行时间拉长,内存问题就会暴露并迅速击穿 SLI。

课程定位: 本课程将围绕 Collector 的 JVM 内存模型、GC 策略、堆外内存管理、缓冲区设计、内存泄漏排查等核心主题,逐一讲解如何通过调优保障 SLI 口径下的数据采集稳定性。每一章都会对应一个具体的稳定性风险场景,并提供可落地的调优方案。