系统资源

    可以通过os模块和fs模块访问系统的资源

    有一些第三方库对os进行了封装,比如os-utils,可以更加方便的获取系统资源

    # 安装os-utils
    pnpm install os-utils
    # 安装os-utils的类型定义
    pnpm install @types/os-utils --save-dev
    src/app/resourceManager.ts}
    import osUtils from 'os-utils';
    import fs from 'fs';
    import os from 'os';
    
    export async function pollResources() {
      const cpuUsage = await getCpuUsage();
      const cpuFree = await getCpuFree();
      const cpuCount = osUtils.cpuCount();
      const cpuModel = os.cpus()[0].model;
      const freemem = osUtils.freemem();
      const totalmem = osUtils.totalmem();
      const freememPercentage = osUtils.freememPercentage();
      const sysUptime = osUtils.sysUptime();
      const processUptime = osUtils.processUptime();
      const loadavg = osUtils.loadavg(1);
      const storageData = getStorageData();
    
      console.log({
        下一秒cpu使用率: `${cpuUsage * 100}%`,
        下一秒cpu可用率: `${cpuFree * 100}%`,
        cpu数量: cpuCount,
        cpu型号: cpuModel,
        可用内存: `${freemem / 1000} GB`,
        总内存: `${totalmem / 1000} GB`,
        可用内存百分比: `${freememPercentage * 100}%`,
        系统已运行时间: `${sysUptime}`,
        进程已运行时间: `${processUptime}`,
        '1分钟内平均负载': loadavg,
        系统盘大小: storageData.total,
        系统盘已使用: storageData.usage,
      });
    
      return {
        cpuUsage,
        cpuFree,
        cpuCount,
        freemem,
        totalmem,
        freememPercentage,
        sysUptime,
        processUptime,
        loadavg,
        storageData,
      };
    }
    
    /** @function 获取cpu使用率 */
    function getCpuUsage(): Promise<number> {
      return new Promise((resolve) => {
        osUtils.cpuUsage(resolve);
      });
    }
    
    /** @function 获取cpu可用率 */
    function getCpuFree(): Promise<number> {
      return new Promise((resolve) => {
        osUtils.cpuFree(resolve);
      });
    }
    
    /** @function 获取系统盘使用情况 */
    function getStorageData() {
      const stats = fs.statfsSync(process.platform === 'win32' ? 'C://' : '/');
      const total = stats.blocks * stats.bsize;
      const free = stats.bfree * stats.bsize;
      return {
        total: Math.floor(total / 1024 / 1024 / 1024),
        usage: `${(1 - free / total) * 100}%`,
      };
    }

    运行结果

    {
      'cpu使用率': '3.370928906349002%',
      'cpu可用率': '99.42050428456939%',
      'cpu数量': 16,
      'cpu型号': '13th Gen Intel(R) Core(TM) i5-13490F',
      '可用内存': '23.63051953125 GB',
      '总内存': '32.618953125 GB',
      '可用内存百分比': '72.4441263778296%',
      '系统已运行时间': '2525.703 秒',
      '进程已运行时间': '2.1498559 秒',
      '1分钟内平均负载': 0,
      '系统盘大小': 199,
      '系统盘已使用': '43.24668964448054%'
    }