LoongCollector针对Prometheus抓取场景做了两项关键优化:
1. 避免内存拷贝:
- 问题:libcurl获取指标文本后存在字符串中,输入插件需要将整个文本拷贝到EventGroup内存池中(大target可达数十MB)。
- 方案:定制libcurl的数据回调函数,将预先构建好的PipelineEventGroup作为参数传入,让libcurl直接将网络响应内容写入EventGroup的内存池。零拷贝。
2. 流式处理:
- 问题:默认等整个网络响应完成后再处理,大target会产生超大的EventGroup,增加流水线驻留数据量和内存。
- 方案:在libcurl回调中实时按行切分生成Log事件,当EventGroup达到阈值时立即推入处理队列,重新生成新Group继续承载后续数据。将超大Group拆成多个小Group。
效果对比(1000 Targets负载):
| Agent | CPU | 内存 |
|---|---|---|
| LoongCollector | 1.41核 | 508MB |
| VMAgent | 2.48核 | 1300-2048MB |
LoongCollector在CPU和内存上均显著优于VMAgent。




