繁体   English   中英

如何阻止nodejs杀死memory之外的子进程?

[英]How to stop nodejs from killing a child process on out of memory?

我在 Node.Js 和大文件中工作。 我正在调用 python 脚本的子进程来处理这些大文件。 现在的问题是,在大文件上 memory 用完,节点 js 通过杀死它来中止进程。 我知道 --max-old-space-size 但我不只是想限制大小。 如果 memory 用完,我希望 node.js 继续处理该过程。 F

例如,Node.js 在 1 分钟内执行一个允许 2GB ram 的进程。 我将 memory 大小限制为 1GB 内存,它应该在 2 分钟内运行该过程但不会出错。 它应该使用队列或其他东西。

编辑:这是我使用 spawn 从子进程执行的命令。

let extExecCommand = "cat file.json | python sample-script.py > output-file"
let extensionScript = childProcess.spawn(extExecCommand, {shell: true});

当 file.json 的大小非常大时,节点中止进程并杀死子进程。 我不希望这种情况发生。 我希望 node js 继续执行该过程并维护某种类型的数据结构。

如果 memory 用完,我希望 node.js 继续处理该过程?*

猜测不可能避免 Heap-Out-of-Memory 错误。

你可以用两个东西。

首先,使用-max-memory-restart选项将单独的进程委托给 PM2 ,并通过生态系统文件运行它,例如: pm2 start test.yaml

apps:
  - script: ./index.js
    name: 'PYTHON'
    instances: 1
    out_file: "/dev/null"
    autorestart: true
    max_memory_restart: '100M'
    log_date_format: 'DD/MM HH:mm:ss.SSS'

第二种选择是使用各种队列作业管理器,例如 Bree、Bull、Agenda 并将您的资源丰富的任务放在那里,将作业分成几部分(如果可能的话)然后管理它。 Node.js 通过worker_thread

但我想,你的项目架构有问题,不应该in-memory存储这么多的数据。 您可以通过、数据库或其他存储访问大文件或数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM