VictoriaLogs 的内存占用主要由“内部缓存 + 近期日志块 + 查询结果缓存”三部分组成。官方默认会自动探测物理机内存并按比例分配,但你可以通过以下两类启动参数把上限压下来,或者固定在一个具体数值。
一、直接限制“缓存可用内存”
VictoriaLogs 沿用了 VictoriaMetrics 的通用内存标志:
-
按百分比限制(默认 60 %)
-memory.allowedPercent=40把比例从 60 % 调到 40 %,进程内部所有缓存(块缓存、倒排索引缓存、查询结果缓存等)加起来不会超过物理内存的 40 %。
-
按绝对值限制(想精确到 GB 时用这个)
-memory.allowedBytes=4GB一旦同时给出
allowedBytes和allowedPercent,前者优先生效;容器/笔记本内存波动时更可控 。
二、减小“并发 + 队列”带来的临时内存
-
降低查询并发
-search.maxConcurrentRequests=2 # 默认 4每并发会缓存一批 posting list 和原始日志块,调半可以省 30-50 % 查询峰值内存。
-
缩短单查询最大时长
-search.maxQueryDuration=10s # 默认 30 s防止大时间范围查询一次性把大量 block 装进内存。
-
缩小 UDP/syslog 接收缓冲(如果用 UDP 入口)
-syslog.listenAddr.udp=:514 -syslog.readBufferBytes=1MB # 默认 16 MB,容器里可调到 512 KB-1 MB
三、Docker / K8s 示范
docker run -d --name=vlogs \
-p 9428:9428 \
-v /data/vlogs:/victoria-logs-data \
victoriametrics/victoria-logs:latest \
-memory.allowedBytes=2GB \
-search.maxConcurrentRequests=2 \
-search.maxQueryDuration=10s \
-retentionPeriod=30d
另外,为了解决runtime/cgo: pthread_create failed: Operation not permitted问题,可以添加一些参数
粗暴做法
docker run --privileged your-image
精细做法
docker run -d --name=myapp \
--cap-add=SYS_ADMIN \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
my-image:latest
四、调优后效果
根据社区压测,“2 CPU + 1 GB 内存” 即可跑满 17 MB/s 的写入吞吐;把 allowedBytes 压到 1-2 GB 后,常驻 RSS 大约只占用 600-800 MB,其余留给系统 page cache,查询性能没有明显下降 。
小结
- 想“一键”降内存:给
-memory.allowedBytes或-memory.allowedPercent即可。 - 再往下压:同时把并发、查询时长、UDP 缓冲等参数同比例缩小。