前提・実現したいこと
node-js メモリリーク解消
以下のコードでgetTestを呼び出すとメモリリークしていると思われます。
引数としてconfig, loggerを渡しているのが問題でしょうか?
メモリリークしていると思われる理由ですが、
メモリ使用量をpm2のモニターで確認していますが起動時40Mから1日で500Mぐらいまで大きくなっているためメモリリークしていると判断しました。
getTest内で毎回requireした方がよいでしょうか?
var config = require('config');
var log4jsLogger = log4('system');
これだと無駄というか処理速度が遅くなる気がしています。
configやloggerの使い方は毎回requireした方が良いのか、ご意見をいただけたらと思います。
よろしくお願いします。
該当のソースコード
node
1[app.js] 2var config = require('config'); 3var path = require('path'); 4var express = require('express'); 5var routes = require('./routes/index'); 6var logger = require('morgan'); 7var cookieParser = require('cookie-parser'); 8var bodyParser = require('body-parser'); 9var app = express(); 10var log4 = require('./log4jsLogger'); 11var log4jsLogger = log4('system'); 12~中略~ 13// ルーティング設定 14routes(app, $dir, config, log4jsLogger); 15 16[index.js] 17var getTest = require('./APIs/getTest'); 18 19module.exports = function (app, $dir, config, logger) { 20 getTest(app, '/getTest', config, logger); 21}; 22 23[getTest.js] 24module.exports = function (app, url, config, logger) { 25 app.post(url, function (req, res) { 26 var moment = require('moment'); 27 var fsExtra = require('fs-extra'); 28 var apiResponse = require('../apiRes'); 29 var sequelize = require('sequelize'); 30 var seq = new sequelize(config.dbConnect); 31 var ProductData = require('../../models/product_data'); 32 var prdData = ProductData(sequelize, seq); 33 prdData.bulkCreate( 34 reqRows, { validate: true } 35 ).then(function () { 36 var row = [{ msg: '正常終了' }]; 37 apiResponse(res, 1, row); 38 }).catch(function (err) { 39 logger.error(err); 40 var row = [{ msg: err }]; 41 apiResponse(res, -1, row); 42 }); 43 }); 44}; 45
補足情報(FW/ツールのバージョンなど)
node 8.9.3
あなたの回答
tips
プレビュー