【悄咪咪学Node.js】7.2 os.totalmem() 和 os.freemem()

236 阅读3分钟

os.totalmem() 和 os.freemem()

1. 前言

本系列课程对非功能性函数内容安排中,将插入一些在生产过程中可能会用到对应函数的例子。

本节课将会引导大家学习了解:

  • os.totalmem() 的使用方法
  • os.freemem() 的使用方法

学习完本节课程后,应该具有:

  • 使用 os 模块获取内存信息的能力

2. os.totalmem()

os.totalmem() 可以获取计算机总内存。

2.1 代码例子

我们先来执行下面这段代码:

// 引入 os 模块
const os = require('os');

// 定义方法,将 byte 单位输出成各种适应的单位
const bytesToSize = (bytes) => {
    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
    if (bytes == 0) return '0 Byte';
    const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
    return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
};

let totalMem = os.totalmem();
// 打印结果
console.log(totalMem + ' bytes: ' + bytesToSize(totalMem));

结果

8589934592 bytes: 8 GB

Tips:os.totalmem() 函数的返回值是以 byte 为单位的总内存。

3 os.freemem()

os.freemem() 可以获取计算机现时空闲内存。

3.1 代码例子

我们先来执行下面这段代码:

// 引入 os 模块
const os = require('os');

// 定义方法,将 byte 单位输出成各种适应的单位
const bytesToSize = (bytes) => {
    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
    if (bytes == 0) return '0 Byte';
    const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
    return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
};

let freeMem = os.freemem();
// 打印结果
console.log(freeMem + ' bytes: ' + bytesToSize(freeMem));

但该段代码在不同的系统平台上有不同的表现。

3.2 平台差异

os.freemem() 有比较致命的平台差异,在不同的系统下有不同的表现:

3.2.1 各大平台枚举

  • windows 平台

结果打印

524410880 bytes: 500 MB

系统监控截图 GVVuEF.jpg转存失败,建议直接上传图片文件

Tips:在 windows 平台上 os.freemem() 表现正常。

  • macos 平台

结果打印

58867712: 56 MB

系统监控截图 GVZ1Ig.md.png

Tips:在 macos 平台上 os.freemem() 表现 异常

  • centos7 平台

结果打印

1829240832: 2 GB

终端执行

free

系统监控

             total        used        free      shared       buff/cache   available
Mem:        3880024       666428     1790680        25600      1422916     2924856

看 byte 单位得知:

Tips:在 centos7 平台上 os.freemem() 表现正常。

  • ubuntu 平台

结果打印

7537307648: 7 GB

终端执行

free

系统监控

             total        used        free      shared       buff/cache   available
Mem:        8021312       79100     7369952        2968      572260     7699404
Swap:        969964           0      969964

Tips:在 ubuntu 平台上 os.freemem() 表现正常。

3.2.2 总结

  • windows: 正常
  • macos: 异常
  • centos7: 正常
  • ubuntu: 正常

4 生产中的作用

在生产中,os.totalmem()os.freemem() 可以用在服务器上,监控服务器运行情况。多台内网服务器间可用 socket 相连,多台外网服务器间可用接口获取数据。

4.1 代码例子

const os = require('os');

function getMem() {
    return {
        totalMem: os.totalmem(),
        freeMem: os.freemem()
    };
}

console.log(getMem());

Tips: socket 连接详细编写规则可阅读本课程 net 章节、express 课程 socket 章节。

5. 小结

本节课程我们主要学习了 如何使用 os.totalmem() 获取机器总内存如何使用 os.freemem() 获取机器现时空闲内存

重点如下:

  1. 重点1

    os.freemem() 在不同系统中有不同的表现(Node.js 10版本),其中 macos 表现异常