首页 > 解决方案 > 如何在 Windows 上的 node.js 中获取/计算当前磁盘活动

问题描述

我正在寻找一种像 Windows 一样计算磁盘活动百分比的方法,而不是使用的空间。当活动长时间太高时,我希望能够从我的应用程序发送警报,表明服务器过载。我找不到任何可以做到这一点的插件,只有告诉磁盘空间使用的插件。

--编辑感谢 mihai 的回答。这是我编写的函数,以防其他人需要它。

第一个版本每次都会启动和停止任务。

function getDiskTimePercent() {
    return new Promise(function (resolve, reject) {
        exec('typeperf "\\LogicalDisk(C:)\\% Disk Time" -SC 1', function (error, stdout, stderr) {
            if (error) {
                reject(error);
            } else {
                const lines = stdout.split('\r\n');
                const values = lines[2].split(",");
                const result = Math.round(values.pop().replace(/"/g, ''), 0);
                resolve(result);
            }
        });
    });
}

这个下一个版本更适合经常定时更新的网站。它让进程运行 50 个样本,然后重新启动进程。如果节点崩溃,这可以防止进程永远运行。

let diskTrackerProcess;
let diskTrackerCurrent = 0;
function getDiskTimePercent() {
    if (!diskTrackerProcess) {
        diskTrackerProcess = exec('typeperf.exe "\\LogicalDisk(C:)\\% Disk Time" -SC 50');
        diskTrackerProcess.stdout.on('data', function (data) {
            const stdout = data.toString();
            const lines = stdout.split('\r\n');
            const values = lines[0].split(",");
            const result = Math.round(values.pop().replace(/"/g, ''), 0);
            if (!isNaN(result)) {
                diskTrackerCurrent = result;
            }
        });
        diskTrackerProcess.on('exit', function (code) {
            diskTrackerProcess = null;
        });
        return diskTrackerCurrent;
    } else {
        return diskTrackerCurrent;
    }
}

标签: node.js

解决方案


Node 本身不是一个好的选择,但你总是可以用它调用外部程序。

我会研究typeperf,一个本机 Windows 命令行实用程序。

我能够通过以下方式在磁盘上获取活动:

typeperf "\\MyComputerName\LogicalDisk(C:)\% Disk Time"

更改MyComputerName为您的机器名称和C:您要监视的磁盘。

输出:

"10/30/2018 22:25:42.132","0.000000"
"10/30/2018 22:25:43.139","0.000000"
"10/30/2018 22:25:44.211","0.000000"
"10/30/2018 22:25:45.220","0.000000"
"10/30/2018 22:25:46.225","0.000000"
"10/30/2018 22:25:47.232","0.081097"
"10/30/2018 22:25:48.237","0.000000"
"10/30/2018 22:25:49.251","0.197538"
"10/30/2018 22:25:50.321","60.390202"
"10/30/2018 22:25:51.333","97.860753"
"10/30/2018 22:25:52.337","11.451819"
"10/30/2018 22:25:53.351","34.524372"

最后一个数字应显示磁盘活动。如果它大于 0,则意味着您的磁盘上发生了一些事情。该命令似乎需要管理员权限或一些提升的特权,这在您的情况下可能是也可能不是问题。

您可以轻松地从节点调用此命令(使用child_process),并解析输出。


推荐阅读