pm2不断重启排查

【p0】pc端进程重启

一、问题:pm2 list 显示进程不断重启

qcLTdZsBo-KX6H6AGs3q03Xw6YysoQsBo86gLFit1xI
aMQgFYFN2LPXrumFoX47qJe6RK5O3XO6lYt8J2DrYsQ
FHkbMpCXktNXOmqTS2Wj4I07igCwIiJStuy6OuVac2g

二、解决办法

本地打包查看内存情况

1、新增.env.development.debug文件

# just a flag
NUXT_APP_ENV = 'development.debug'

2、package.json 新增打包命令

		"build:debug": "node ./generate-version.js && cross-env NODE_ENV=development.debug nuxt build",
		"debug": "cross-env NODE_ENV=development.debug node --inspect  node_modules/.bin/nuxt start",
		"start:debug": "rm -rf node_modules && yarn install && npm run build:debug && npm run debug"

3、启动

npm run start:debug

GM9Y_Sol16fJv3zDbeMg4yUbGCky_2amLXIdd3pBqHg

4、检测内存

chrome://inspect/#devices

xAjQj-ESG3p3_LEwMEb8fpb3PAezwC--R9jXU_IF2oI

OPN3BlYPUJL5Ck8jJi0idNRNLtilt-utioJPBOs66qM

未访问localhost:3000前打1次内存快照

访问localhost:3000后打第2次快照

关闭localhost:3000标签后打第三次快照

访问localhost:3000后打第4次快照

关闭localhost:3000标签后打第5次快照

访问localhost:3000后打第6次快照

关闭localhost:3000标签后打第7次快照

WaMxganUC8h_8uXh7CufDioYDDfsiZJIdghHw0VkQb0

内存不断增加,查看第5和弟6次之间分配的内存

点击具体实例,点击对应的文件

查看对应代码的情况

TrRLtJyTzfoeEfX5MAItHoNbPUn_eo3t9Iilx2P3niI

Dn_qcZ-SlSMP1GTRYl8NXwopGDang393TDkhiRu8Rmo

4giPWSgINKpwiChJrJ7VAY8PEXnupSBB3PYXIkvmB8U

ogtZbpZjy4fjXie5WcgeMAN8H0CuZYbYDha9SFhCg_4

发现是layouts/error.vue的computed中调用了setInterval 没清除

三、修复

computed 中注释handleCountDown方法

改为mounted中调用

Gc-lsa0Jp4PQRCrHxElSThInc54ZWPVQMkWWNm46mcs

四、修复成功后pm2 list 显示重启为0,内存没有飙升

H0FWTAsJV1Tzhnx9yCDSiFZj2-sZXqgDql92RKiHTmU

HARrZcRYkhGNhlZNXiAiM44BiH2tVwh3F-MovXUBV5k

eI5mu3_t-ORlpLh4QEI7jCz5ZHa0a1O5KU6cJWkdF6c

五、总结

内存泄漏代码上就那些点~

1、事件监听器:如果在组件中添加了事件监听器,但在组件销毁时没有移除它们,可能会导致内存泄漏。

2. 定时器和异步操作:使用 setTimeout 或 setInterval 时,如果没有在组件销毁时清除这些定时器,也会导致内存泄漏。

3. 未清理的引用:在 Vue 组件中,如果有对 DOM 元素或其他对象的引用,而这些引用在组件销毁时没有被清理,可能会导致内存泄漏。

4. Vuex 状态管理:如果在 Vuex 中存储了大量数据,而这些数据在不再需要时没有被清理,也可能导致内存泄漏

六、参考链接

排查 Nuxt.js服务器端内存泄漏问题(Nuxt 3同理)

https://juejin.cn/post/7228834021152473145

https://developer.chrome.com/docs/devtools/memory?hl=zh-cn

https://www.ruanyifeng.com/blog/2018/12/git-bisect.html

转载请注明出处