的NodeJS有一個內置的,我們可以通過在我們這行代碼怎樣的NodeJS OS模塊工作
var os = require('os');
有許多的功能,使用例如獲取可用內存,總內存使用OS模塊,CPU使用率,平均負載等。
我的問題是如何做nodejs計算這些信息?
例如,free/total RAM內存,這是如何在窗簾下完成的。它是否正在調用另一個進程來讀取系統中的統計信息?它是否運行單獨的命令,如iostat
或dstat
?它是如何爲我們檢索這些數據的?
的NodeJS有一個內置的,我們可以通過在我們這行代碼怎樣的NodeJS OS模塊工作
var os = require('os');
有許多的功能,使用例如獲取可用內存,總內存使用OS模塊,CPU使用率,平均負載等。
我的問題是如何做nodejs計算這些信息?
例如,free/total RAM內存,這是如何在窗簾下完成的。它是否正在調用另一個進程來讀取系統中的統計信息?它是否運行單獨的命令,如iostat
或dstat
?它是如何爲我們檢索這些數據的?
os.totalmem
函數是從process.binding('os')
調用的本地函數,稱爲getTotalMem
。他們的實現可以在節點的源代碼中找到:
下面的代碼可以在src/node_os.cc
發現:
static void GetTotalMemory(const FunctionCallbackInfo<Value>& args) {
double amount = uv_get_total_memory();
if (amount < 0)
return;
args.GetReturnValue().Set(amount);
}
// ...
env->SetMethod(target, "getTotalMem", GetTotalMemory);
的uv_get_total_memory
功能基於主機操作系統several implementations。
下面是Linux實現deps/uv/src/unix/linux-core.c
:
uint64_t uv_get_total_memory(void) {
struct sysinfo info;
if (sysinfo(&info) == 0)
return (uint64_t) info.totalram * info.mem_unit;
return 0;
}
的Linux構建使用sysinfo
得到這個信息。它不需要產生另一個進程。
謝謝!這是我正在尋找的。我不知道爲什麼我會陷入低谷,但這有幫助。謝謝 –
您可能可以通過[源代碼](https://github.com/nodejs/node/blob/master/lib/os.js)進行挖掘並找出它的實現方式。 – Aurora0001