我正在使用spawn-child npm包来产生一个shell,我运行一个最初建立在C++上的二进制文件。我将Stdin提供给二进制文件,然后二进制文件每秒都会发送Stdout。在节点部分,一旦我开始从二进制接收标准输出,我有一个on
听众,它看起来像stdout.on('data', function (data) {})
,我发送这些数据到SSE频道。Node.js虚拟内存不断增加,同时使用子进程
一切工作正常,但主要关注的是节点进程的不断内存增长,我看到当我每次用Stdin打开二进制文件时。我已经概述了我的代码的外观,是否有一种优雅的方式来控制这种内存增长,如果是的话请分享。
var sseChannel = require('sse-channel'),
spawnCommand = require('spawn-command'),
cmd = 'path to the binary file',
globalArray = [],
uuid = require('uuid');
module.exports = function(app) {
var child = spawnCommand(cmd),
privateChannel = new sseChannel({
historySize: 0,
cors: {
origins: ['*']
},
pingInterval: 15 * 1000,
jsonEncode: false
});
srvc = {
get: function(req, res) {
globalArray[uuid.v4()] = res;
child.stdin.write('a json object in a format that is expected by binary' + '\n'); // req.query.<queryVal>
child.stdout.on('data', function(data) {
privateChannel.send(JSON.stringify(data));
});
},
delete: function(sessionID) {
var response = globalArray[sessionID];
privateChannel.removeClient(response);
response.end();
delete globalArray[sessionID];
}
}
}
这个代码仅仅是列举它是什么样子的应用程序。在这种情况下,运行代码片段不起作用。
我收集堆转储在2周不同的时间间隔,这是如何统计看,有一个巨大的增加类型数组值,什么可以做,以保持或抑制类型数组的增长,
你是否每次请求调用'srvc.get()'? – mscdex
是的,这是正确的。每次发出请求时,都会有一个stdin提供给二进制文件,stdout'on'监听器会记录数据。 – Sai
srvc'的范围是什么?每次模块调用时你是否有意覆盖它?请向我们展示完整的代码。 – Bergi