问题

最近在公司维护nuxt项目时,线上遇到了一个问题——访问网站,网站会报502或者JS、css资源报502。

去运维那一查pm2,项目node服务器的CPU达到了100%,实际上这段时间并没有人访问,那是为什么CPU会100%从而导致node服务器无法正常运行?

分析

太多的分析就不说了,期间向几个方向都排查过:

  • nuxt社区有人说是nuxt框架问题,某些版本会出现node服务端内存泄漏。
  • 第三方组件未在destroy时进行释放,或者事件监听,页面关闭后未解绑事件。
  • 代码的书写问题,闭包引起的内存泄漏。
  • 用谷歌浏览器工具分析网站内存使用情况,发现大量Vue.component组件未释放。
  • 官网说SSR最好不要使用Vue.use()和 Vue.component(),这会导致内存泄漏(官网链接)。

我们可以得出大概率是node服务端内存泄漏,导致CPU缓慢升高,每请求一次网站页面都会造成重复的代码块积累在服务端,并且不会释放。

解决

我们找到项目中使用Vue.use()的地方,并打log查看。

import Vue from 'vue'
import Errors from '@/components/custom/Errors'export default () => {Vue.use(Errors)console.log(Vue, 'logVue');
}

多次刷新页面,我们可以看到在控制台看到node服务端的log情况。搜索Errors,有大量重复的Errors组件,实际上只需要一个Errors组件就够了。

找到了问题,接下来就好办了。在Vue.use() 注册时检查服务端是否注册过,如果注册过,就不再注册:

import Vue from 'vue'
import Errors from '@/components/custom/Errors'export default () => {if (Vue._use_components) {return}Vue._use_components = trueVue.use(Errors)console.log(Vue, 'logVue');
}

可以看到打印出来的log,多次刷新请求服务器,Errors组件也不会被多次注册了。

总结

1、用到第三方组件在页面生命周期结束前destroy释放,

2、事件监听,生命周期结束前解绑事件。

3、接下来只需要将用到 Vue.use()和Vue.component()地方的代码加上判断优化。

4、冗余保护:因为我们的CPU设置的是1024M,所以我们在pm2加上:

"max_memory_restart": "1000M"

如果CPU达到1000M内存阈值,则重新启动。

优化后项目CPU运行情况:

nuxt.js之SSR服务端内存泄漏导致CPU过高的解决过程相关推荐

  1. Nuxt.js 开发SSR(服务端渲染)Web应用

    1. 初识 Nuxt.js Nuxt.js 是一个基于 Vue.js 的通用应用框架. 与 vuepress 的关系: Nuxt.js 能够胜任 VuePress 的功能,但它专为构建应用程序而设计, ...

  2. nuxt.js实战asyncdata服务端渲染

    Nuxt扩展了Vue的生命周期: export default {middleware () {}, //服务端,中间件validate () {}, // 服务端asyncData () {}, / ...

  3. SSR服务端渲染(nuxt重构项目)

    SSR服务端渲染(nuxt重构项目) 目的:优化SEO,提高网站权重 ,页面静态化,强化搜索引擎,提高首屏渲染速度 参考文档:https://zh.nuxtjs.org/guide/installat ...

  4. Nuxt SSR 服务端渲染 详解

    Nuxt SSR 服务端渲染 详解 1.Nuxt项目构建 2.Nuxt的生命周期 2.1 nuxtServerInit 钩子 2.2 middleware 中间件 2.3 validate 数据校验 ...

  5. 什么是SSR服务端渲染

    SSR简介 SSR 是Server Side Render简称:就是在服务端进行渲染生成html文件,浏览器世界显示生成html文件, 补充:我们传统使用的属于CSR是Client Side Rend ...

  6. SSR 服务端渲染与 CSR 客户端渲染

    SSR 服务端渲染与 CSR 客户端渲染 SSR 服务端渲染 CSR 客户端渲染 本文要点: 介绍 SSR 服务端渲染概念.优点.缺点.案例及常用框架. 介绍 CSR 服务端渲染概念.优点.缺点. S ...

  7. nuxt.js的ssr渲染

    nuxt.js的ssr渲染 1.为什么要用到nuxt?有什么优势? 1.1 为什么要用到nuxt? 首先要了解nuxt是什么?具体有什么作用? Nuxt.js:Vue.js的通用框架,集成了vue2. ...

  8. Nuxt.js开启SSR渲染快速入门

    Nuxt.js开启SSR渲染快速入门 第一节:nuxt.js相关概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的, ...

  9. nuxt.js实战之移动端rem

    nuxt.js的项目由于是服务端渲染,通过js动态调整不同尺寸设备的根字体这种rem方案存在一种缺陷.由于设置字体的代码不能做服务端渲染,导致服务端返回的代码一开始没有相应的跟字体,直到与前端代码进行 ...

最新文章

  1. 从纸钱包,带你走进贴心的BCH!
  2. js中split,splice,slice方法之间的差异。
  3. maven编译报程序包不存在_宝马730i空调不制冷,报冷却剂压缩机当前存在故障
  4. linux的poll_wait函数,select() 与 poll()两个函数接口的作用
  5. CO_P0(logisim)
  6. GB28181协议——布防和报警订阅
  7. mysql 修改表的编码_Mysql表编码查看修改
  8. linux tintin 中文,GitHub - oiuv/tt: TinTin++ on Termux for pkuxkx,(全平台 Mud 客户端)。
  9. A4张的尺寸大小是多大?像素又是多少呢?
  10. 线性代数学习之特征值与特征向量
  11. 小波图像处理 —— 奇异点(不连续点)检测
  12. python读取图片像素矩阵
  13. DStream转换操作
  14. 通过Hyper-V的方式快速安装Linux虚拟机
  15. 微信小程序“this.setdata is not a function”
  16. The humbling of Goldman Sachs 高盛走下神坛 | 经济学人20230128版社论高质量双语精翻
  17. vivo Y55解账户锁刷机包 线刷包救砖教程
  18. Android 设备清理内存 RAM
  19. 【数据分析】如何在企业中从0-1建立一个数据/商业分析部门
  20. 四大家族垄断下,国产工业机器人企业亟待突围

热门文章

  1. 简单一招,严禁迅雷偷偷上传!(转自九月论坛)
  2. swift和python哪个好_单从语法角度讲,Swift 完爆 Java Python 和 C#吗?
  3. 通过url地址批量打包zip下载文件
  4. 2021-06-10 Multisim的74LS192功能表及555时基74LS190
  5. 热敏电阻NTC103、PT100温度计算公式
  6. Arduino开发板使用红外遥控发射器和接收器的初学指南
  7. Web Tours无法打开
  8. a8 内存 华硕k550d_A8-5550M能逆袭么? 华硕K550D新本评测
  9. CDN产业发展现状分析报告
  10. 快速导出B站收藏单节目列表