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 目标:
1.5 内存调优在采集稳定性中的定位
从上述路径图可以清晰看到:内存问题是采集稳定性风险的放大器。一个未优化的 Collector,在低负载下可能表现正常,但一旦流量高峰到来或运行时间拉长,内存问题就会暴露并迅速击穿 SLI。
课程定位: 本课程将围绕 Collector 的 JVM 内存模型、GC 策略、堆外内存管理、缓冲区设计、内存泄漏排查等核心主题,逐一讲解如何通过调优保障 SLI 口径下的数据采集稳定性。每一章都会对应一个具体的稳定性风险场景,并提供可落地的调优方案。