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
Tips:在 windows 平台上
os.freemem()表现正常。
- macos 平台:
结果打印
58867712: 56 MB
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
os.freemem()在不同系统中有不同的表现(Node.js 10版本),其中 macos 表现异常。