victorialogs如何在启动时限定好资源使用量以及数据保留时间

83 阅读2分钟

VictoriaLogs 的内存占用主要由“内部缓存 + 近期日志块 + 查询结果缓存”三部分组成。官方默认会自动探测物理机内存并按比例分配,但你可以通过以下两类启动参数把上限压下来,或者固定在一个具体数值。


一、直接限制“缓存可用内存”

VictoriaLogs 沿用了 VictoriaMetrics 的通用内存标志:

  1. 按百分比限制(默认 60 %)

    -memory.allowedPercent=40
    

    把比例从 60 % 调到 40 %,进程内部所有缓存(块缓存、倒排索引缓存、查询结果缓存等)加起来不会超过物理内存的 40 %。

  2. 按绝对值限制(想精确到 GB 时用这个)

    -memory.allowedBytes=4GB
    

    一旦同时给出 allowedBytesallowedPercent前者优先生效;容器/笔记本内存波动时更可控 。


二、减小“并发 + 队列”带来的临时内存

  1. 降低查询并发

    -search.maxConcurrentRequests=2      # 默认 4
    

    每并发会缓存一批 posting list 和原始日志块,调半可以省 30-50 % 查询峰值内存。

  2. 缩短单查询最大时长

    -search.maxQueryDuration=10s         # 默认 30 s
    

    防止大时间范围查询一次性把大量 block 装进内存。

  3. 缩小 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 缓冲等参数同比例缩小。