docker部署MongoDB执行mongorestore导入1.75GB gz文件触发OOM进程被杀
解决方案
调整Docker容器内存配额
首先确认MongoDB容器的内存限制,默认部署可能设置了过低的内存上限导致OOM。执行docker inspect <你的MongoDB容器名称/ID> | grep Memory查看当前配额,若低于12GB可先上调容器内存上限后重试导入。缩小mongorestore批量插入大小
你当前已经把并行度降到最低,但默认的单批次插入文档数过大依然会占用大量内存,添加--batchSize参数控制单次插入的文档数量,可先设置为1000,内存占用还是高的话继续调低到500甚至200。提前解压备份文件再导入
直接使用--gzip参数导入时,mongorestore需要同时执行解压、数据校验、写入操作,额外占用的内存会放大峰值内存占用。你可以先在宿主机执行gzip -d logs.bson.gz解压备份文件,导入时去掉--gzip参数即可,能降低30%以上的内存开销。调低MongoDB WiredTiger缓存上限
MongoDB默认会占用宿主机/容器50%的内存作为WiredTiger引擎的缓存,剩余可用内存不足以支撑导入操作时就会触发OOM。你可以修改容器内的mongod配置文件,添加wiredTigerCacheSizeGB=2配置项,将缓存上限调低到2GB,预留足够内存给导入任务,导入完成后再调回原有值即可。
调整后的参考导入命令如下:
mongorestore -u superAdmin -p 'password123321!' \ --numParallelCollections 1 \ --numInsertionWorkersPerCollection 1 \ --batchSize 1000 \ --authenticationDatabase=admin --drop --db "logs" logs.bson
内容的提问来源于stack exchange,提问作者MR Karrot
相关产品推荐
相关产品推荐

