概述
PM2 Daemon 进程内存占用持续上涨,很大原因可能不是本身的原因,大概率是使用PM2启动启动的服务内存存在问题,而导致PM2 Daemon 进程内存持续上涨。
解决问题的思路:解决 Node 中内存问题,最好的解决方案就是抓取内存堆快照。
抓取PM2启动进程的内存堆快照,请前往我的这篇文章。CSDNhttps://mp.csdn.net/mp_blog/creation/editor/120100534本文主要讲解如何抓取PM2 Daemon 进程的内存快照。
1、首先需要修改PM2的源码,找到node_modules目录下的pm2目录,这是pm2的源码目录。
2、打开文件 pm2libClient.js,添加调试端口代码(大约在232行),如下图
node_args.push("--inspect=9950");
代码如下:
/**
* Launch the Daemon by forking this same file
* The method Client.remoteWrapper will be called
*
* @method launchDaemon
* @param {Object} opts
* @param {Object} [opts.interactor=true] allow to disable interaction on launch
*/
Client.prototype.launchDaemon = function(opts, cb) {
if (typeof(opts) == 'function') {
cb = opts;
opts = {
interactor : true
};
}var that = this
var ClientJS = path.resolve(path.dirname(module.filename), 'Daemon.js');
var node_args = [];
var out, err;// if (process.env.TRAVIS) {
// // Redirect PM2 internal err and out to STDERR STDOUT when running with Travis
// out = 1;
// err = 2;
// }
// else {
out = fs.openSync(that.conf.PM2_LOG_FILE_PATH, 'a'),
err = fs.openSync(that.conf.PM2_LOG_FILE_PATH, 'a');
//}//此处为新增加代码
node_args.push("--inspect=9950");
if (this.conf.LOW_MEMORY_ENVIRONMENT) {
var os = require('os');
node_args.push('--gc-global'); // Does full GC (smaller memory footprint)
node_args.push('--max-old-space-size=' + Math.floor(os.totalmem() / 1024 / 1024));
// node_args.push('--inspect=9960');
}
3、保存代码,将所有node进程结束,使用查看版本的命令(目的是启动pm2 Daemon 进程)
pm2 -v
4、查看任务管理器,如下图
5、打开chrome浏览器,输入地址
chrome://inspect/#devices
如下图:
6、点击configure,添加配置
localhost:9950
如下图:
点击Done
7、查看调试工具是否连接,如下图:
8、 点击 Open dedicated DevTools for Node 打开调试工具(也可以点击下面 inspect 进入对应的项目调试)
9、抓取内存堆快照
10、录制堆快照
注1:chrome版本:版本 93.0.4577.63(正式版本) (64 位)
注2:linux 下可使用 阿里云Node.js性能平台,原理一样,修改Pm2源码,增加相应的命令参数即可。
最后
以上就是柔弱奇异果为你收集整理的关于 PM2 Daemon 进程,内存爆涨的问题分析及解决的全部内容,希望文章能够帮你解决关于 PM2 Daemon 进程,内存爆涨的问题分析及解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复