有趣的NodeJS模块 – os

作者 : 开心源码 本文共1751个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共222人阅读

image

读了 os 模块的文档,研究了几个有意思的问题:

  • ?? 识别操作系统平台
  • ?? 了解和计算“平均负载”
  • ?? 了解和计算“cpu 使用率”
  • ?? 了解和计算“内存使用率”
  • ?? 查看运行时间

?? 关注公众号“心谭博客” / ?? 查看原文: xxoo521.com / 欢迎交流和指正

识别操作系统平台

nodejs 提供了os.platform()os.type(),可以用来识别操作系统平台。推荐使用: os.platform()

了解和计算“平均负载”

平均负载是指:单位时间内,系统处于可运行状态和不可中断状态的平均进程数。它和 cpu 使用率没有直接关系。

其中,这里的可运行状态指的是:正在使用 cpu 或者正在等待 cpu 的进程。不可中断状态指的是:内核态关键流程中的进程。

在 nodejs 中,直接调用os.loadavg()可以取得 1、5 和 15 分钟的平均负载,它和 unix 命令uptime返回值一样。

为什么需要关心平均负载这个问题呢?由于进程分为 2 种,第一种就是“CPU 密集型”,它的 cpu 使用率和平均负载都是高的;第二种是“IO 密集型”,它的 cpu 使用率不肯定高,但是等待 IO 会造成平均负载高。所以,cpu 使用率和平均负载共同反应系统性能。

平均活跃进程数最理想的状态是 cpu 数量=平均负载,假如 cpu 数量 < 平均负载,那么平均负载过高。

// 判断能否平均负载过高function isHighLoad() {    const cpuNum = os.cpus().length;    return os.loadavg().map(item => item > cpuNum);}

了解和计算“cpu 使用率”

很多监控软件都提供针对 cpu 使用率的“实时”监控,当然这个实时不是真的实时,有个时间差。这个功能,nodejs 如何实现呢?

第一步:封装getCPUInfo(),计算获取 cpu 花费的总时间与空闲模式花费的时间。

/** * 获取cpu花费的总时间与空闲模式的时间 */function getCPUInfo() {    const cpus = os.cpus();    let user = 0,        nice = 0,        sys = 0,        idle = 0,        irq = 0,        total = 0;    cpus.forEach(cpu => {        const { times } = cpu;        user += times.user;        nice += times.nice;        sys += times.sys;        idle += times.idle;        irq += times.irq;    });    total = user + nice + sys + idle + irq;    return {        total,        idle    };}

第二步:当前时间点 t1,选定一个时间差 intervel,计算 t1 和 t1 + interval 这两个时间点的 cpu 时间差与空闲模式时间差,返回 1 - 空闲时间差 / cpu时间差。返回的结果就是时间差 intervel 内的平均 cpu 使用率。

function getCPUUsage(interval = 1000) {    const startInfo = getCPUInfo();    return new Promise(resolve => {        setTimeout(() => {            const endInfo = getCPUInfo();            const idleDiff = startInfo.idle - endInfo.idle;            const totalDiff = startInfo.total - endInfo.total;            resolve(1 - Math.abs(idleDiff / totalDiff));        }, interval);    });}

使用方式如下:

getCPUUsage().then(usage => console.log("cpu使用率:", usage));

了解和计算“内存使用率”

cpu 的指标有平均负载、cpu 使用率,内存的指标有内存使用率。

借助 nodejs 接口,实现非常简单:

function getMemUsage() {    return 1 - os.freemem() / os.totalmem();}

查看运行时间

  • nodejs 运行时间:process.uptime()
  • 系统运行时间:os.uptime()

参考链接

  • Node.js os doc
  • 第三方扩展库:os-utils
  • 怎样了解平均负载(一)
  • 字节序(大小端)了解

专注前台与算法的系列干货分享,欢迎关注(???)

image

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 有趣的NodeJS模块 – os

发表回复