资源限制
介绍
在分布式追踪系统中,Jaeger 作为核心组件,其资源使用直接影响系统的稳定性和性能。资源限制是指通过配置约束 Jaeger 服务对内存、CPU 和存储等资源的使用,避免因资源耗尽导致服务崩溃或性能下降。本指南将详细介绍如何为 Jaeger 设置合理的资源限制,适合初学者逐步实践。
为什么需要资源限制?
Jaeger 在处理大量追踪数据时可能占用大量资源,尤其是:
- 内存: 存储未落盘的追踪数据。
- CPU:处理数据压缩和查询请求。
- 存储:长期保存追踪数据。
未配置资源限制可能导致:
- 服务因内存溢出(OOM)被终止。
- 节点资源被独占,影响其他服务。
- 存储成本不可控。
核心配置项
1. 内存限制
通过环境变量或启动参数限制 Jaeger Collector 和 Query 服务的内存:
# 示例:Kubernetes Deployment 配置
env:
- name: SPAN_STORAGE_TYPE
value: "elasticsearch"
- name: ES_MAX_NUM_SPANS # 限制单个批次的Span数量
value: "50000"
- name: MEMORY_MAX_TRACES # 内存中保留的最大追踪数
value: "10000"
备注
Jaeger Agent 默认内存限制为 --collector.queue-size=2000
(队列大小),超过时会丢弃数据。
2. CPU 限制
在容器化部署中(如 Docker 或 Kubernetes),直接通过资源声明限制 CPU:
# Kubernetes 示例
resources:
limits:
cpu: "2"
memory: "4Gi"
requests:
cpu: "1"
memory: "2Gi"