2017-03-22 45 views
-1

的NodeJS有一個內置的,我們可以通過在我們這行代碼怎樣的NodeJS OS模塊工作

var os = require('os'); 

有許多的功能,使用例如獲取可用內存,總內存使用OS模塊,CPU使用率,平均負載等。

我的問題是如何做nodejs計算這些信息?

例如,free/total RAM內存,這是如何在窗簾下完成的。它是否正在調用另一個進程來讀取系統中的統計信息?它是否運行單獨的命令,如iostatdstat?它是如何爲我們檢索這些數據的?

+2

您可能可以通過[源代碼](https://github.com/nodejs/node/blob/master/lib/os.js)進行挖掘並找出它的實現方式。 – Aurora0001

回答

1

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得到這個信息。它不需要產生另一個進程。

+0

謝謝!這是我正在尋找的。我不知道爲什麼我會陷入低谷,但這有幫助。謝謝 –