MST

星途 面试题库

面试题:JavaScript 中如何在 Node 进程内监控 CPU 使用率

请描述在 Node.js 环境下,使用 JavaScript 监控当前进程 CPU 使用率的基本思路与实现方法,可提及相关的内置模块或第三方库。
39.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

基本思路

  1. 获取进程开始和结束时的 CPU 时间。
  2. 获取开始和结束时的系统 CPU 时间。
  3. 通过计算进程 CPU 时间变化与系统 CPU 时间变化的比例,得出进程 CPU 使用率。

实现方法

  1. 使用 os 内置模块os 模块提供了获取系统相关信息的方法,包括 CPU 时间。
  2. 代码示例
const os = require('os');
const { performance } = require('perf_hooks');

function getCPULoad() {
    const startUsage = process.cpuUsage();
    const startCpuTime = os.cpus().reduce((acc, cpu) => acc + cpu.times.user + cpu.times.nice + cpu.times.sys + cpu.times.idle + cpu.times.irq, 0);
    const startTime = performance.now();

    // 等待一段时间,例如1000毫秒
    return new Promise((resolve) => {
        setTimeout(() => {
            const endUsage = process.cpuUsage(startUsage);
            const endCpuTime = os.cpus().reduce((acc, cpu) => acc + cpu.times.user + cpu.times.nice + cpu.times.sys + cpu.times.idle + cpu.times.irq, 0);
            const endTime = performance.now();

            const cpuDelta = endUsage.user + endUsage.system;
            const totalDelta = (endCpuTime - startCpuTime) + (endTime - startTime);

            const cpuUsagePercentage = (cpuDelta / totalDelta) * 100;
            resolve(cpuUsagePercentage);
        }, 1000);
    });
}

getCPULoad().then(load => {
    console.log(`当前进程 CPU 使用率: ${load}%`);
});
  1. 第三方库 pidusage
    • 安装npm install pidusage
    • 使用示例
const pidusage = require('pidusage');

pidusage(process.pid, (err, stats) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(`当前进程 CPU 使用率: ${stats.cpu}%`);
});
  • pidusage 库会定期获取进程的 CPU 使用率等信息,使用起来相对简洁。