NodeJS模块os

时间: 2020-01-17阅读: 297标签: 模块

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

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


识别操作系统平台

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()

原文: xxoo521.com   

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/7283

Vue 中如何正确引入第三方模块

配置 webpack ProvidePlugin 全局引入,假设要使用到 jquery,那么可以通过配置 webpack 的 ProvidePlugin 的插件来全局引入;另外一种比较靠谱的方法是将第三方模块打包成插件,如我需要全局使用 echarts,那么在 src 目录下新建一个 lib

ES6 export 和 export default的区别

ES6中 export 和 export default 与 import使用的区别,使用 react native 代码详解,现在流行的前端框架,angular+ 主要使用 export 导出模块,react native 中使用 export default 导出模块,如今编辑器非常强大,安装插件会自动弹出模块名称,知道其导出怎么使用就可以了

Javascript模块的写法-AMD, CMD, CommonJS和UMD

Javascript模块的写法-AMD, CMD, CommonJS和UMD。JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD,CMD等。

Nodejs核心模块简介

学习nodejs必须要掌握其核心,就像学JavaScript必须掌握函数、对象、数据类型、BOM、DOM等。nodejs核心也不少,这里介绍几个核心:Events模块、fs模块、stream的使用、http模块。

利用Proxy,如何优雅实现JSBridge模块化封装

最近公司在做一个项目,通过把我们自己的Webview植入第三方APP,然后我们的业务全部通过H5实现。至于为什么不直接用第三方APP WebView,主要是身处金融行业,需要做一些风控相关功能

最全的前端模块化方案

模块化主要是用来抽离公共代码,隔离作用域,避免变量冲突等。将一个复杂的系统分解为多个模块以方便编码。会讲述以下内容:CommonJS、AMD 及 核心原理实现、CMD 及 核心原理实现

Node.js 模块系统源码探微

Node.js 的出现使得前端工程师可以跨端工作在服务器上,当然,一个新的运行环境的诞生亦会带来新的模块、功能、抑或是思想上的革新,本文将带领读者领略 Node.js (以下简称 Node) 的模块设计思想以及剖析部分核心源码实现。

es6中的模块化

在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。先来看个例子,来对一个变量进行模块化

css模块的解决办法 演进

CSS预处理器最大的好处就是可以支持模块引入,用js的方式来编写CSS,编译之后,终究还是一个文件,因此不可避免的会出现冲突样式;BEM就是为了解决命名冲突以及更好的语义化而生的

如何让 node 运行 es6 模块文件,及其原理

最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机制。而现在我们很多项目都是用 es6 的模块化规范来写代码的,包括 node 项目

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广