我是靠谱客的博主 柔弱奇异果,最近开发中收集的这篇文章主要介绍关于 PM2 Daemon 进程,内存爆涨的问题分析及解决,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        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 进程,内存爆涨的问题分析及解决所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部