Memory Arena是LoongCollector性能优化的第一步,通过为PipelineEventGroup引入内存池,解决大量高频字符串创建/销毁和日志解析时的重复拷贝问题。
核心设计:
- 每个PipelineEventGroup拥有一个SourceBuffer内存池
- Group内所有字符串都在这个池上分配,用string_view引用片段
- 所有涉及string的成员类型改为string_view
优化效果示例:
原始日志2025-01-01 10:00:00 [INFO] test message经正则提取后,如果使用string存储提取结果,会将原始内容几乎完整拷贝一份。使用Memory Arena后,LogEvent的mContents只需存储指向原始字符串对应片段的string_view引用,零拷贝。
修改后的数据结构:
class LogEvent : public PipelineEvent {
private:
std::map<std::string_view, std::string_view> mContents;
};
内存池对外接口AllocateStringBuffer(size_t size)按需分配空间并返回引用。这一优化大幅减少了内存分配次数和数据拷贝量。




