Node Cpu 100% 问题分析解决

使用prof分析解决问题

准备

进入系统或者容器,关闭原有的服务,用node启动新的服务

遇到的其他问题自行搜索解决(端口重复、pm2退出)

启动项目

启动项目,生成一个刻度文件,isolate-0xnnnnnnnnnnnn-v8.log(其中n是数字)。

sql 复制代码
NODE_ENV=production  node --prof /data/srv/dist/main.js

processed.txt文件生成

通过对刻度文件isolate-0xnnnnnnnnnnnn-v8.log执行命令--prof-process生成 processed.txt

sql 复制代码
node --prof-process isolate-0x62b3c60-762-v8.log > processed.txt

processed.txt文件分析

分析修复processed.txt解决问题(看不懂查资料或者用 ai kimi、通义等进行分析)

比如这里,ticks total 最大的方法,问题就在这里,name 里面有方法名称和路径行数(注意是编译后的文件行数)

在Node.js 中,每次事件循环执行一次完整的过程,我们称之为tick

sql 复制代码
 [JavaScript]:
   ticks  total  nonlib   name
  151918   89.2%   99.9%  LazyCompile: *phpStrtr /data/srv/dist/common/utils/strUtil.js:41:18
     32    0.0%    0.0%  LazyCompile: *resolve node:path:1091:10

其他

结合代码位置,系统日志进行分析解决

sql 复制代码
export function errorCode(str: string, replacementsList: {replaceWord: string, replaceTo: string}[]) {
    const replacements: {[key: string]: string} = {};
    replacementsList.forEach((item) => {
    // 这里没有空判断,导致死循环
        if (item.replaceWord !== '') {
            replacements[item.replaceWord] = item.replaceTo;
        }
    });

    // 继续处理逻辑
}

资料

国行的这叫基础教程页面好看,内容简单,对新手有好

Node.js 简介

了解 process.nextTick()

Node.js --- Profiling Node.js Applications

Node.js --- Flame Graphs

相关推荐
Neweee4 分钟前
JavaScript进阶内容详解
前端
大鸡爪5 分钟前
Vue3 组件库实战(五):Icon 图标组件的设计与实现
前端·vue.js
bluceli5 分钟前
前端测试实战指南:构建高质量代码的完整体系
前端·测试
行走的陀螺仪6 分钟前
前端公共库开发保姆级路线:从0到1复刻VueUse官方级架构(pnpm+Turbo+VitePress)
前端·架构
顽固_倔强6 分钟前
深入理解 Vue3 数据绑定实现原理
前端·面试
前端付豪6 分钟前
组件拆分重构 App.vue
前端·架构·代码规范
Wect7 分钟前
React 更新触发原理详解
前端·react.js·面试
cxxcode7 分钟前
Web 帧渲染与 DOM 准备
前端
光影少年7 分钟前
React Hooks的理解?常用的有哪些?
前端·react.js·掘金·金石计划
大鸡爪8 分钟前
Vue3 组件库实战(七):从本地到 NPM:版本管理与自动化发布指南(下)
前端·vue.js