You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mongoimport导入CSV数据时遇InterruptedAtShutdown错误求助

排查mongoimport导入时出现InterruptedAtShutdown错误的方案

问题场景

尝试用mongoimport导入700万条CSV记录到已有800万数据的MongoDB集合,为检测重复邮箱,使用了--mode upsert --upsertFields email参数,通过NodeJS的shell-exec包执行命令时出现如下错误:

2022-10-20T19:39:52.847+0100 connected to: mongodb://127.0.0.1:27017/
2022-10-20T19:39:55.849+0100 […] notitia.usb2bs 1.09MB/1.22GB (0.1%)
2022-10-20T19:39:58.849+0100 […] notitia.usb2bs 1.09MB/1.22GB (0.1%)
2022-10-20T19:40:01.240+0100 […] notitia.usb2bs 1.09MB/1.22GB (0.1%)
2022-10-20T19:40:01.240+0100 Failed: (InterruptedAtShutdown) interrupted at shutdown
2022-10-20T19:40:01.240+0100 0 document(s) imported successfully. 0 document(s) failed to import.

排查步骤

  • 先确认email字段是否有唯一索引:没有索引的情况下,upsert操作会进行全表扫描,速度极慢,大概率导致进程长时间无响应被终止。执行以下命令创建索引:
    db.your_collection_name.createIndex({email: 1}, {unique: true})
    
  • 检查NodeJS进程状态:shell-exec调用的子进程可能因为Node主进程被kill、内存不足崩溃或超时设置触发中断。可以改用Node原生的child_process.spawn替代shell-exec,手动监听进程信号,排查是否主进程异常退出;同时检查Node应用的日志,看有没有内存溢出或未捕获的错误。
  • 查看MongoDB服务日志:确认导入过程中MongoDB是否重启、崩溃或连接中断。日志路径一般是/var/log/mongodb/mongod.log(Linux),检查里面有没有OOM(内存不足)、连接断开或服务重启的记录。
  • 优化mongoimport参数:
    • 调整批量大小:添加--batchSize 5000(根据内存情况调整),减少IO交互次数;
    • 启用多线程:添加--numInsertionWorkers 4(根据CPU核心数设置,比如核心数的一半),提升导入速度;
    • 拆分CSV文件:把1.22GB的大文件拆成多个小文件(比如每个100MB),分批导入,降低单次导入的资源压力。
  • 检查系统资源:
    • 内存:用free -h查看内存使用情况,如果剩余内存不足,系统可能会杀死占用内存高的进程(mongoimport或MongoDB);查看系统日志/var/log/syslog(Linux)有没有OOM Killer相关的记录;
    • 磁盘IO:用iostat或iotop检查磁盘读写负载,如果磁盘IO过高,会导致导入卡住,长时间无响应被中断。

内容的提问来源于stack exchange,提问作者Ahsan Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:41