我正在使用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