Linux 下使用Sigar 獲取記憶體資訊

2021-07-03 07:19:10 字數 1340 閱讀 4140

和cpu 一樣,sigar中有和記憶體相關的結構體sigar_mem_t,我們來看一下結構體原型:

typedef

struct sigar_mem_t;

從中可以看到和結構體相關的資訊還是比較全面的,包括記憶體總量(total),實際記憶體使用量(actual_used),實際記憶體剩餘量(actual_free),並且還包括記憶體使用率(used_percent),和記憶體空閒率(free_percent).

好了,接下來我們看看怎樣獲得這些資料.

對於記憶體資訊的獲取,我們要用到sigar_mem_get函式,函式原型如下:

sigar_declare(int) sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem);
另外,sigar中對於虛擬記憶體(swap 分割槽)資訊的獲取也有特定的結構體sigar_swap_t,感興趣的同學可以參照獲取記憶體資訊的方式來獲取一下虛擬記憶體的資訊.

好了,下面是程式的原始碼,因**較少,就不逐一分析了,相信你一看就明白了.

#include 

#include

#include

using

namespace

std;

int main(int argc,char **argv)

我們列印一下輸出結果:

細心的同學可能會用free 命令的結果做一下比較:

結果發現free 的值和程式中獲取的不一樣,這是怎麼回事?

其實,這裡涉及到linux 記憶體管理機制的東西,linux 核心會把剩餘的記憶體申請為cached,而cached不屬於free範疇。

直觀的看free命令的free值很小,但並不代表可用的記憶體小,當乙個程式需要申請較大的記憶體時,如果free的記憶體不夠,核心會把部分cached的記憶體**,**的記憶體再分配給應用程式。

所以對於linux系統,可用於分配的記憶體不只是free的記憶體,還包括cached 的記憶體 和buffers 的記憶體.

這就是為什麼我們程式中計算可用記憶體的時候用mem.actual_free而不是mem.free了,這麼一說相信聰明的你肯定明白了.

sigar獲取程序資訊

最近工作中用到sigar,要用sigar獲得相關的cpu資訊,記憶體資訊,程序資訊等。但是大多數還是能在網上找到的。就只有獲得程序的資訊怎麼找也找不以。今天貼出來和大家分享一下,還請各位指教。獲取程序的相關資訊以及對程序資訊進行包裝 public listgetprocessinfo process...

使用sigar獲取處理器 記憶體 系統和網路資訊

首先建立乙個web專案,在webroot web inf lib下新增以下庫和包 庫的新增要根據不同的作業系統決定,以下包適用於windows xp和vista 編寫測試類 import org.hyperic.sigar.cpuperc import org.hyperic.sigar.mem i...

Sigar使用之 取得記憶體相關資料

在做系統監控的時候,為了分析系統的效能,我們不僅僅要取得cpu的使用資料,還要知道記憶體的占用情況。使用sigar也可以輕鬆的完成跨平台的記憶體監控資料。記憶體的主要指標有 物理記憶體的大小 使用數 剩餘數 交換記憶體的大小 使用數 剩餘數 ram的大小等等。下面通過例子說明 1.package l...