packages/plugin-ssr/src/cmd/doctor.ts (26 lines of code) (raw):

import { CommandArgs } from '@alicloud/console-toolkit-core'; import { info, done, error } from '@alicloud/console-toolkit-shared-utils' import { memoryUsage } from 'process' import { prepareCode } from '../utils'; const doctor = async (args: CommandArgs) => { const tmpPath = prepareCode(args) const entry = require(tmpPath); const module = {exports: {default: (any: any) => {}}} entry(module) module.exports.default({ location: args.path }); info(`准备开始对 ${args._[1]} 做渲染检查`); const memoryUsageBefore = memoryUsage(); info(`初始堆栈数据 rss: ${memoryUsageBefore.rss}, heapTotal: ${memoryUsageBefore.heapTotal}, heapUsed: ${memoryUsageBefore.heapUsed}`); for(let index = 1; index < (args.renderNumber ? +args.renderNumber : 1000); index++) { const module = {exports: {default: (any: any) => {}}} entry(module) module.exports.default({ location: args.path }); if (index % 100 == 0) { console.log(`进度 ${index*100/1000}%`) global.gc(); } } const memoryUsageAfter = memoryUsage(); done(`最终数据 rss: ${memoryUsageBefore.rss}, heapTotal: ${memoryUsageAfter.heapTotal}, heapUsed: ${memoryUsageAfter.heapUsed}`); global.gc(); if ((memoryUsageAfter.heapUsed - memoryUsageBefore.heapUsed) / memoryUsageBefore.heapUsed > 0.1 && !args.heapdump) { error(`发现内存溢出 你可以通过添加 --heapdump 参数生成 内存快照 排查内存`) console.log(`\n\t tnpm i heapdump`) console.log(`\n\t ${process.argv.join(' ')} --heapdump`) } if (args.heapdump) { info(`正在生成 heapdump 文件 ...`); const heapdump = require('heapdump') heapdump.writeSnapshot(); } } export default doctor;