panic: FATAL: cannot mmap "victoria-logs-data/partitions/20260114/datadb/188A6FDD6B358A3A/values.bin3": cannot mmap file with size 4096 bytes; already memory mapped files: 64860: cannot allocate memory; try increasing /proc/sys/vm/max_map_count or passing -fs.disableMmap command-line flag to the application
麻烦的是我这个VL跑在容器里,而且没有做进程守护(不过做了也没用)
VictoriaLogs 启动时直接把数据文件 mmap 到内存,Linux 默认对每个进程最多允许 65530 次映射(/proc/sys/vm/max_map_count)。
你的库里有 64 860 个文件已经 mmap 出去了,再要映射新的 values.bin3 时触顶,于是直接 panic。
解决办法(任选其一,推荐先 1 后 2):
-
临时提高系统级上限(重启后失效,先救急)
sudo sysctl -w vm.max_map_count=262144 -
永久生效
把下面一行写进/etc/sysctl.conf或/etc/sysctl.d/99-victorialogs.confvm.max_map_count = 262144然后
sudo sysctl -p -
如果机器内存本身吃紧,不想再 mmap,可直接让 VictoriaLogs 退回到普通 read/write IO:
在启动参数里加上-fs.disableMmap这会牺牲一点性能,但不再占用 map 槽位;上限问题随之消失。
-
极端场景(单库百万级小文件)
把-fs.disableMmap与-retentionPeriod/-snapshotKeepTime搭配使用,定期合并/删除旧分区,减少文件数。
改完 /proc/sys/vm/max_map_count 后无需重启系统,只重启 VictoriaLogs 即可。