linux服务器之查看内存使用情况
生活随笔
收集整理的這篇文章主要介紹了
linux服务器之查看内存使用情况
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
讀取/proc/meminfo 文件
MemTotal: 45964 kB //所有可用的內存大小,物理內存減去預留位和內核使用。系統從加電開始到引導完成,firmware/BIOS要預留一些內存,內核本身要占用一些內存,最后剩下可供內核支配的內存就是MemTotal。這個值在系統運行期間一般是固定不變的,重啟會改變。 MemFree: 1636 kB //表示系統尚未使用的內存。 MemAvailable: 8496 kB //真正的系統可用內存,系統中有些內存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以這部分可回收的內存加上MemFree才是系統可用的內存 Buffers: 0 kB //用來給塊設備做緩存的內存,(文件系統的 metadata、pages) Cached: 7828 kB //分配給文件緩沖區的內存,例如vi一個文件,就會將未保存的內容寫到該緩沖區 SwapCached: 0 kB //被高速緩沖存儲用的交換空間(硬盤的swap)的大小 Active: 19772 kB //經常使用的高速緩沖存儲器頁面文件大小 Inactive: 3128 kB //不經常使用的高速緩沖存儲器文件大小 Active(anon): 15124 kB //活躍的匿名內存 Inactive(anon): 52 kB //不活躍的匿名內存 Active(file): 4648 kB //活躍的文件使用內存 Inactive(file): 3076 kB //不活躍的文件使用內存 Unevictable: 0 kB //不能被釋放的內存頁 Mlocked: 0 kB //系統調用 mlock 家族允許程序在物理內存上鎖住它的部分或全部地址空間。這將阻止Linux 將這個內存頁調度到交換空間(swap space),即使該程序已有一段時間沒有訪問這段空間 SwapTotal: 0 kB //交換空間總內存 SwapFree: 0 kB //交換空間空閑內存 Dirty: 4 kB //等待被寫回到磁盤的 Writeback: 0 kB //正在被寫回的 AnonPages: 15100 kB //未映射頁的內存/映射到用戶空間的非文件頁表大小 Mapped: 7160 kB //映射文件內存 Shmem: 100 kB //已經被分配的共享內存 Slab: 9236 kB //內核數據結構緩存 SReclaimable: 2316 kB //可收回slab內存 SUnreclaim: 6920 kB //不可收回slab內存 KernelStack: 2408 kB //內核消耗的內存 PageTables: 1268 kB //管理內存分頁的索引表的大小 NFS_Unstable: 0 kB //不穩定頁表的大小 Bounce: 0 kB //在低端內存中分配一個臨時buffer作為跳轉,把位于高端內存的緩存數據復制到此處消耗的內存 WritebackTmp: 0 kB //FUSE用于臨時寫回緩沖區的內存 CommitLimit: 22980 kB //系統實際可分配內存 Committed_AS: 536244 kB //系統當前已分配的內存 VmallocTotal: 892928 kB //預留的虛擬內存總量 VmallocUsed: 29064 kB //已經被使用的虛擬內存 VmallocChunk: 860156 kB //可分配的最大的邏輯連續的虛擬內存MemTotal
系統從加電開始到引導完成,firmware/BIOS要保留一些內存,kernel本身要占用一些內存,最后剩下可供kernel支配的內存就是MemTotal。這個值在系統運行期間一般是固定不變的。可參閱解讀DMESG中的內存初始化信息。
MemFree
表示系統尚未使用的內存。[MemTotal-MemFree]就是已被用掉的內存。
MemAvailable
有些應用程序會根據系統的可用內存大小自動調整內存申請的多少,所以需要一個記錄當前可用內存數量的統計值,MemFree并不適用,因為MemFree不能代表全部可用的內存,系統中有些內存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以這部分可回收的內存加上MemFree才是系統可用的內存,即MemAvailable。/proc/meminfo中的MemAvailable是內核使用特定的算法估算出來的,要注意這是一個估計值,并不精確。
?zabbix:
static int VM_MEMORY_AVAILABLE(AGENT_RESULT *result) {FILE *f;zbx_uint64_t value;struct sysinfo info;int res, ret = SYSINFO_RET_FAIL;/* try MemAvailable (present since Linux 3.14), falling back to a calculation based on sysinfo() and Cached *///從/proc/meminfo 獲取內存信息if (NULL == (f = fopen("/proc/meminfo", "r"))){SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot open /proc/meminfo: %s", zbx_strerror(errno)));return SYSINFO_RET_FAIL;}//獲取 MemAvailable 對應的值if (FAIL == (res = byte_value_from_proc_file(f, "MemAvailable:", "Cached:", &value))){SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain the value of MemAvailable from /proc/meminfo."));goto close;}if (SUCCEED == res){SET_UI64_RESULT(result, value);ret = SYSINFO_RET_OK;goto close;}if (FAIL == (res = byte_value_from_proc_file(f, "Cached:", NULL, &value))){SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain the value of Cached from /proc/meminfo."));goto close;}if (NOTSUPPORTED == res)value = 0;if (0 != sysinfo(&info)){SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot obtain system information: %s", zbx_strerror(errno)));goto close;}SET_UI64_RESULT(result, (zbx_uint64_t)(info.freeram + info.bufferram) * info.mem_unit + value);ret = SYSINFO_RET_OK; close:zbx_fclose(f);return ret; }參考:
?/proc/meminfo內存文件詳解 Linux - 知乎
總結
以上是生活随笔為你收集整理的linux服务器之查看内存使用情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 服务器之查看磁盘使用情况
- 下一篇: FFMPEG结构体分析之AVFormat