首页 > 解决方案 > 为什么我的 PHP 进程在解析 XML 并插入 MongoDB 时退出

问题描述

第一次使用 MongoDB,我有一些需要帮助的行为。

我正在使用 PHP/Symfony 命令解析一个大的 XML 文件(85GB)。对于每 100 条记录,我执行一个$collection->insertMany($items, ['ordered' => false]);插入 100 条记录的命令,重置数组并继续解析。

由于某种原因,PHP 命令在达到大约 706.400 条记录时才停止。我没有 PHP 错误,也没有来自 MongoDB docker 容器的错误。我所看到的只是来自 MongoDB 的一些关于慢速查询的警告,然后连接就结束了。我尝试在不调用 MongoDB 的情况下运行脚本,它运行良好。花费时间更长,总共有约 1000 万条记录。我曾尝试一次插入 1、100、500 个,最终结果相同。当它达到约 700.000 次插入时,我的 MacBook 风扇会发疯,并且控制台命令会出现问题(我正在运行一个进度条)。

查看 Activity Monitor RAM 运行良好,并且 docker 进程上有很多 CPU 活动。真的不可能在 MacBook Pro 上用 MongoDB 做这样的事情吗?解析它没有工作正常。

这是我的 docker-compose;

version: "3.1"
services:

    webserver:
      image: nginx:alpine
      container_name: vehicle-registry-webserver
      working_dir: /application
      volumes:
          - .:/application
          - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: phpdocker/php-fpm
      container_name: vehicle-registry-php-fpm
      working_dir: /application
      volumes:
        - .:/application
        - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini

    mongodb_container:
      image: mongo:latest
      environment:
        MONGO_INITDB_ROOT_USERNAME: root
        MONGO_INITDB_ROOT_PASSWORD: rootpassword
      ports:
        - 27017:27017
      volumes:
        - mongodb_data_container:/data/db

volumes:
  mongodb_data_container:
mongodb_container_1  | {"t":{"$date":"2020-08-24T13:27:54.850+00:00"},"s":"I",  "c":"COMMAND",  "id":51803,   "ctx":"conn28","msg":"Slow query","attr":{"type":"command","ns":"symfony.Vehicle","command":{"insert":"Vehicle","ordered":false,"$db":"symfony","lsid":{"id":{"$uuid":"0288c26c-99b2-472b-b645-5fc70e84db44"}}},"ninserted":50,"keysInserted":50,"numYields":0,"reslen":45,"locks":{"ParallelBatchWriterMode":{"acquireCount":{"r":1}},"ReplicationStateTransition":{"acquireCount":{"w":1}},"Global":{"acquireCount":{"w":1}},"Database":{"acquireCount":{"w":1}},"Collection":{"acquireCount":{"w":1}},"Mutex":{"acquireCount":{"r":1}}},"flowControl":{"acquireCount":1,"timeAcquiringMicros":1473},"storage":{},"protocol":"op_msg","durationMillis":714}}
mongodb_container_1  | {"t":{"$date":"2020-08-24T13:28:02.082+00:00"},"s":"I",  "c":"NETWORK",  "id":22944,   "ctx":"conn28","msg":"connection ended","attr":{"remote":"172.18.0.2:45066","connectionCount":6}}

知道为什么吗?我是否达到了 MongoDB 的一些限制?

启动前的 CPU 使用率 运行时 CPU 使用率和 CPU 突然增加 进程停止时的 CPU 使用率

标签: phpmongodbdockersymfony

解决方案


推荐阅读