使用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;
}
});
// 继续处理逻辑
}
资料
国行的这叫基础教程页面好看,内容简单,对新手有好