关于 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、打开文件 pm2\lib\Client.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 进程,内存爆涨的问题分析及解决相关推荐
- Android应用内存泄漏的定位、分析与解决策略
Hello,大家好,我是Clock.翻了一下简书,发现有一个多月没有更新博客,本来今天打算和妹纸去电影院看<你的名字>,然后再去到处浪的. 结果因为妹纸公司临时有事,她不得不回公司一趟.. ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )
文章目录 一.使用 IDA 分析要修改的内存特征 二.根据内存特征搜索修改点 三.修改进程内存 一.使用 IDA 分析要修改的内存特征 在前的博客 [Android 逆向]逆向修改游戏应用 ( 分析应 ...
- mysql内存爆_线上MySQL机器内存爆掉原因分析与解决
现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨上去后,却不下来.累积后内存爆掉. 分析: 此业务是间隔的对MySQL有大访问,其它时间几乎无访问.排查发现,内存涨时,一般会有MySQ ...
- mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决
本文主要向大家介绍了线上MySQL数据库机器内存爆掉原因分析与解决,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨 ...
- glance查看进程内存使用过大问题
glance查看进程内存使用过大问题 如题,CPU使用率才3%,基本上就没用应用在跑,可内存都用了73%, 实际的物理内存为48G,单个进程有好多都超过500M了,这是什么原因呀? Glance C. ...
- pytorch运行过程中死机(内存爆掉或者内存正常)
linux18.04下,在运行pytorch程序的过程中,电脑直接卡死死机,鼠标和键盘都没有反应,只能强制关机. 安装htop观察内存和cpu的使用情况,内存32G,CPU是i7-8700. 程序在之 ...
- linux 进程内存分布及 堆分配和栈分配的特点
文章目录 进程内存空间分布 size命令查看内存分布 堆方式内存分配和栈方式内存分配比较 使用stap 深入追踪malloc逻辑 进程内存空间分布 一个程序的内存空间主要如下: 代码段(text se ...
- Linux查看进程内存状况
查看全部进程 通过top或ps -ef | grep '进程名' 得到进程的PID.该命令可以提供进程状态.文件句柄数.内存使用情况等信息. #pa aux 先查看进程 nginx的工作进程是5757 ...
- 转 linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值
引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...
最新文章
- 突破帧率天花板,超速全时视觉感知芯片重塑机器视觉技术体系
- 简述JavaME,JavaSE,JavaEE
- Spring MVC与表单日期提交的问题
- 基于Java的RDMA高性能通信库(一):IBM jVerbs库
- 如何给DataFrame的列命名或重命名。
- python mount回调函数_让Python脚本暂停执行的几种方法(小结)
- 单片机蜂鸣器编程音乐_基于单片机的智能鱼缸温控系统设计
- QuickSort 快速排序
- Redis学习笔记(四) 发布订阅命令
- poj 1056 IMMEDIATE DECODABILITY trie树 ——字典树 静态数组版
- XE5 搭建DataSnap服务
- 输入关键字生成对联_对联生成器在线生成_对联在线自动生成器下载V1.0.0|好特下载...
- 单个dcm文件含有多帧数据,如何拆分成多个dcm文件
- 创龙TI TMS320C6748定点/浮点DSP C674xSD卡接口、拓展IO信号
- 电脑安装win10系统
- 数码相机与手机相机成像差别
- Win系统 - Win10 进入 BIOS 系统(非启动快捷键)
- 奋什么直什么的成语(奋什么直什么四字成语大全)
- agios插件之监控AEP主机InBound和Awaiting数量
- Lotus Notes Send EMail from VB or VBA
热门文章
- numpy python取表格的前几行前几列 某行某列
- 金蝶应收应付模块流程_金蝶应收应付手册
- 写一封信给N年前的自己
- 2018百度之星大赛游记
- 两个函数相加、相减、相乘等之后的单调性
- 信息安全的核心:CIA三元组 | 安全千字文系列1
- Linux下使用云笔记及OneNote
- 计算机显示器文字不清楚,笔记本电脑字体显示不清晰解决方法分辨率和显卡驱动...
- maya2020linux下卸载,卸载产品的步骤 | Maya 2022 | Autodesk Knowledge Network
- SSM+阳光大学宿舍管理系统 毕业设计-附源码211714