Node.js的os模块提供os.platform()、os.arch()、os.totalmem()、os.freemem()、os.cpus()、os.uptime()、os.userInfo()和os.networkInterfaces()等核心方法,分别用于获取操作系统平台、CPU架构、内存使用、CPU负载、系统运行时间、用户信息及网络接口信息,广泛应用于跨平台兼容、资源监控、性能优化、日志审计、服务绑定和网络诊断等场景。

Node.js提供了一个非常直接且内置的
os
Node.js的
os
比如说,想要知道当前系统是Windows、Linux还是macOS,
os.platform()
os.cpus()
os.totalmem()
os.freemem()
以下是一个简单的示例,展示了如何获取并打印一些常见的操作系统信息:
const os = require('os');
console.log('--- 操作系统信息概览 ---');
console.log(`平台: ${os.platform()}`); // 例如 'darwin', 'win32', 'linux'
console.log(`架构: ${os.arch()}`); // 例如 'x64', 'arm64'
console.log(`系统类型: ${os.type()}`); // 例如 'Darwin', 'Linux', 'Windows_NT'
console.log(`系统版本: ${os.release()}`); // 例如 '20.6.0', '10.0.19044'
console.log(`主机名: ${os.hostname()}`); // 计算机名称
console.log(`操作系统启动时间: ${os.uptime()} 秒`); // 系统已运行时间
const totalMemoryMB = (os.totalmem() / 1024 / 1024).toFixed(2);
const freeMemoryMB = (os.freemem() / 1024 / 1024).toFixed(2);
console.log(`总内存: ${totalMemoryMB} MB`);
console.log(`可用内存: ${freeMemoryMB} MB`);
const cpus = os.cpus();
console.log(`CPU 核心数: ${cpus.length}`);
cpus.forEach((cpu, index) => {
console.log(` 核心 ${index + 1}: ${cpu.model} (${cpu.speed} MHz)`);
});
const userInfo = os.userInfo();
console.log(`当前用户: ${userInfo.username}`);
console.log(`用户主目录: ${userInfo.homedir}`);
// 获取网络接口信息
const networkInterfaces = os.networkInterfaces();
console.log('\n--- 网络接口信息 ---');
for (const interfaceName in networkInterfaces) {
console.log(`接口: ${interfaceName}`);
networkInterfaces[interfaceName].forEach(details => {
console.log(` 地址: ${details.address}, 家族: ${details.family}, 内部: ${details.internal}`);
});
}在我看来,这个
os
当我们深入到
os
os.platform()
os.arch()
os.platform()
'win32'
'darwin'
'linux'
os.arch()
'x64'
'arm64'
os.platform()
os.totalmem()
os.freemem()
os.cpus()
cluster
os.uptime()
os.userInfo()
在我看来,这些方法就像是Node.js给我们的一个工具箱,里面的每个工具都有其独特的用处。关键在于,我们要知道什么时候该拿起哪个工具,才能高效且准确地解决问题。
利用
os
核心思路是周期性地采集数据并进行分析。
os.totalmem()
os.freemem()
os.cpus()
内存监控与预警:
setInterval
os.freemem()
((os.totalmem() - os.freemem()) / os.totalmem()) * 100
CPU负载分析:
os.cpus()
user
nice
sys
idle
irq
例如,计算
idle
这对于多进程Node.js应用(如使用
cluster
一个简单的CPU负载计算可能看起来是这样的:
let previousCpuInfo = os.cpus();
setInterval(() => {
const currentCpuInfo = os.cpus();
currentCpuInfo.forEach((cpu, i) => {
const prev = previousCpuInfo[i];
const total = Object.values(cpu.times).reduce((sum, val) => sum + val, 0);
const prevTotal = Object.values(prev.times).reduce((sum, val) => sum + val, 0);
const idleDiff = cpu.times.idle - prev.times.idle;
const totalDiff = total - prevTotal;
const usage = 100 - Math.floor(100 * idleDiff / totalDiff);
// console.log(`核心 ${i+1} 使用率: ${usage}%`);
// 在这里可以根据usage进行预警或日志记录
});
previousCpuInfo = currentCpuInfo;
}, 5000); // 每5秒采样一次当然,这只是一个简化版,实际应用中可能需要更复杂的平滑算法和更细致的分析。
日志记录与可视化:
在我看来,性能优化不仅仅是写出更快的代码,更是对整个系统运行状态的把握。
os
获取操作系统用户和网络接口信息,虽然不像内存或CPU那样直接关联到性能瓶颈,但在特定的应用场景下,它们能提供非常关键的环境上下文,帮助我们构建更智能、更适应性强的Node.js应用。
操作系统用户信息 (os.userInfo()
os.userInfo()
username
uid
gid
shell
homedir
os.userInfo().homedir
~/.my-cli/token.json
homedir
os.userInfo().username
uid
gid
uid === 0
有时候,我写一些内部的自动化脚本,需要确保脚本以某个特定的用户身份运行,或者需要把生成的文件放到当前用户能访问的目录,
os.userInfo()
网络接口信息 (os.networkInterfaces()
os.networkInterfaces()
os.networkInterfaces()
localhost
const networkInterfaces = os.networkInterfaces();
let localIpAddress = '127.0.0.1'; // 默认回环地址
for (const name of Object.keys(networkInterfaces)) {
for (const iface of networkInterfaces[name]) {
// 过滤IPv4地址,非内部接口
if (iface.family === 'IPv4' && !iface.internal) {
localIpAddress = iface.address;
break;
}
}
if (localIpAddress !== '127.0.0.1') break;
}
// console.log(`服务将绑定到: ${localIpAddress}`);
// app.listen(port, localIpAddress, () => { ... });os.networkInterfaces()
os.networkInterfaces()
在我看来,网络接口信息虽然看起来有点复杂,但它对于构建那些需要与网络环境深度交互的应用来说,是不可或缺的。它提供了我们理解和控制网络行为的基础数据。
以上就是Node.js中如何操作系统信息?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号