久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

聊聊 Linux 的內存統計

2021-03-06    分類: 網站建設

本文主要分析 Linux 系統內存統計的一些指標以及進程角度內存使用監控的一些方法。
開始閱讀這篇文章前,請先簡單閱讀下面的幾篇文章。
《進程眼中的線性地址空間
《線程眼中的線性地址空間
《聊聊內存管理》
想必這幾篇文章過后,基本概念就不需要再贅述了。所以下文直接就找一臺 Intel x86_64 架構下安裝了 64bit Linux 系統的服務器作為例進行相關的實驗和結果分析。Linux 的內存管理從物理內存管理到虛擬內存管理涉及的概念和統計項實在太多,本文從實用和系統運維的角度出發,只列舉一些最實用的統計。
上面的背景介紹文章把內存相關的基礎概念講的差不多了,這里不再贅述。本文定位是內存統計,所以從最基礎的內存統計的命令—free命令開始。執行free命令,可以看到如下的輸出:
聊聊 Linux 的內存統計
縱向是內存和Swap分區,橫向是統計項。縱向的含義以及Swap不需要解釋,我們看橫向的統計項:
total — 系統總內存(其實就是從 /proc/meminfo獲取的)
used — 已使用內存
free — 未使用的內存
shared — 共享內存的大小,主要是 tmpfs
buff / cache — buffers和cache使用的內存之和
available — 可用內存,可以簡單理解為未使用的內存和可釋放的內存之和(buffer、cache 可以釋放大部分,所以這里近似等于 free + buffer / cache 的大小)
這臺機器的系統和內核稍微新一點,這個輸出可能和你看到的不一樣,早先的free命令的輸出是這樣:
聊聊 Linux 的內存統計
這里的shared為0,因為這臺服務器沒用共享內存。這里多解釋下-/+ buffer/cache這行,字面意思就是used - buffers/cache和used + buffers/cache。前者指的是從應用程序角度系統被用掉了多少內存,后者指的是從應用程序角度看系統還有多少內存能用。聽起來很復雜,其實說白了就是因為buffers和cached可以被釋放出來,多幾個指標看看系統還能用多少內存而已。
下面用幾個公式來解釋這個輸出:
1234567891011 # 內存總量 = 已使用內存 + 空閑內存`total` = `used` + `free`# 系統被用掉的內存`-buffers/cache` = `used` - `buffers` - `cached`# 系統還能用的內存`+buffers/cache` = `free` + `buffers` + `cached`# 所以,其實還有下面的公式`total` = `-buffers/cache` + `+buffers/cache`
buffers/cached不是100%都能釋放出來使用的,上面的“可用內存”其實就是個近似值。最上面新版本系統的輸出中有一個available項目表示可用內存,值小于free + buff/cache,內核 3.14 之后支持該特性(雖然也不是絕對意義上的精確的可用內存大小,囧)。
這里稍微多說一點buffers和cached。Linux 2.4.10 內核之前,磁盤的緩存有兩種,即Buffer Cache和Page Cache。前者緩存管理磁盤文件系統時讀取的塊,后者存放訪問具體文件內容時生成的頁。在 2.4.10 之后,Buffer Cache這個概念就不存在了,這些數據被放在Page Cache中(這種Page被稱為Buffer Pages)。
簡而言之,現在磁盤的 cache 只有 Page Cache一種,在Page Cache中,有一種Page叫Buffer Page,這種Page都與一個叫buffer_head的數據結構關聯,這些頁也就在內存統計中用buffers這個指標來單獨統計了。
很多命令的內存統計都是從/proc/meminfo讀取的。鑒于/proc/meminfo的 man 文檔(man proc)寫的實在不夠清晰,很多條目居然還是To be documented狀態,所以這里逐一列舉出來常見的統計項解釋一下。
首先明確一點,內核目前并沒有絕對精確的統計所有的內存使用量,比如alloc_pages接口申請的內存不一定被統計在內(除非所有調用alloc_pages的代碼主動進行統計,如果某些不講究的驅動程序沒有主動統計的話統計值就肯定對不上了)。
先看這三項全局統計:
MemTotal — 總的全局可用內存大小(即物理RAM減去保留的以及內核代碼占用的,系統啟動后一般固定不變)
MemFree — 總的全局未使用內存大小
MemAvailable — 內核估計出來的全局可用內存大小,非精確值(MemFree不代表所有可用的內存,Cache/Buffer、Slab均有部分可以臨時釋放的內存要計算在內)
用戶進程的內存頁分為兩種:
與文件關聯的內存頁(File-backed Pages), 比如程序文件、讀取文件時數據對應的緩存頁
與文件無關的匿名內存頁(Anonymous Pages),比如進程的堆、棧等分配的內存
所有Page Cache里的頁面都是File-backed Pages,File-backed Pages在內存不足的時候可以直接寫回對應的硬盤文件里,即Page-out。而Anonymous Pages在內存不足時就只能寫到硬盤上的交換區Swap里來釋放內存,稱之為Swap-out。
Anonymous Pages與用戶進程共存,進程退出則Anonymous pages釋放,而Page Cache即使在進程退出后還可以緩存。
下面是磁盤緩存相關的統計項:
Buffers — 塊設備所占用的緩存頁,比如磁盤文件系統的meta信息如SuperBlock等,直接讀寫塊設備產生的緩存也統計在這里(例如dd命令)
Cached — 從磁盤讀取的文件內容緩存(即Page cache)
SwapCached — Swap中包含的確定要被換出,但是尚未寫入物理交換區的匿名內存頁
SwapTotal — 可用的磁盤Swap總大小
SwapFree — 磁盤Swap的free大小
Dirty — 修改了等待寫回磁盤的內存大小
Writeback — 正在寫回磁盤的內存大小
以下幾項和內核的頁面回收算法(Page Frame Reclaiming)相關,Page Cache和所有用戶進程的內存(除內核棧和HugePages外)都在相關的LRU Lists上。內核在 2.6 以前就引入了增強的LRU算法來解決樸素的LRU算法完全不考慮使用頻率的問題。具體的Active 鏈表和Inactive 鏈表的使用詳情請參閱其他資料。
Active — 最近使用的內存,回收的優先級低
Inactive — 最近較少使用的內存,回收的優先級高
Active (anon) — Active 鏈表中的匿名頁(Anonymous Pages)部分
Inactive (anon) — Inactive 鏈表中的匿名頁(Anonymous Pages)部分
Active (file) — Active 鏈表中的File-backed Pages部分
Inactive (file) — Inactive 鏈表中的File-backed Pages部分
Unevictable — 禁止換出的頁,對應Unevictable 鏈表,其中包括VM_LOCKED的內存頁、SHM_LOCK的共享內存頁(也統計在Mlocked中)、和Ramfs等
Mlocked — mlock系統調用鎖定的內存大小
共享內存在 Linux 中細分的話可以分為以下幾種:
SystemV Shared Memory — shmget
POSIX Shared Memory — shm_open
Shared Anonymous Memory — mmap(MAP_ANONYMOUS | MAP_SHARED)
共享內存在內核中都是 基于tmpf機制實現 的。因為基于文件系統所以就不能算是匿名頁,不能計入AnonPages的統計項,而只能計入Cached和Mapped統計項。但是,tmpfs背后并沒有真實的磁盤文件存在,如果想要被臨時釋放出來,只能通過Swap的方式,所以內存頁被鏈接到了Inactive(anon)和Active(anon)里。
也就是說,共享內存的頁面屬于File-backed Pages,但是被放在Inactive(anon)和Active(anon)鏈表里,統計也不算在AnonPages里,而是算在Cached和Mapped里。特別地,如果這些頁被mlock的話,就放在Unevictable鏈里并計算在內。所以從數值上看,Inactive(anon)項 +Active(anon)項 不等于AnonPages項,因為前者包括共享內存的部分。Active(file)項 +Inactive(file)項 也不等于Mapped項,因為前者中包括Unmapped的內存,后者還包含共享內存的部分(這部分在Inactive(anon)和Active(anon)里)。
這里有一個情況要注意,與文件關聯的頁也有可能是匿名頁(MAP_PRIVATE映射的頁面被修改時會產生一個匿名頁拷貝),會被算到AnonPages里。
與此相關的相關的統計項有:
AnonPages — 匿名頁(Anonymous pages)的大小,同時也包含Transparent HugePages (THP)對應的 AnonHugePages
Mapped — 設備和文件等映射的大小,Mapped統計了Cached中所有的Mapped頁面,是Cached的子集(滿足Cached-Mapped=Unmapped)。共享內存、可執行程序的文件、動態庫、mmap的文件等都統計在這里
Shmem — 共享內存的大小,包括Shared Memory、tmpfs和devtmpfs
注意 Linux 的內存是真正使用時才分配的,所以注意這里的大小都是已分配的大小,而不是程序里申請的大小。
下面都是內核使用的內存相關的統計項:
Slab — 內核Slab結構使用的大小(就是那個Slab分配器占用的)
SReclaimable — 內核Slab里面可回收的部分(調用kmem_getpages()時帶有 SLAB_RECLAIM_ACCOUNT 標的)
SUnreclaim — Slab里面無法回收的大小,等于Slab項 -SReclaimable項
KernelStack — 分配給內核棧的大小(每個用戶線程都會分配一個Kernel Stack,系統調用syscall、trap、exception后進入內核態執行代碼時候使用)
PageTables — 頁表的大小(就是經常掛在嘴上的那個頁表)
NFS_Unstable — 發送到服務端但尚未提交的 NFS 頁的大小
Bounce — 塊設備 “bounce buffers” 部分的大小(有些老設備只能訪問低端內存,比如 16M 以下,這部分分配的 buffer 統計在這里)
WritebackTmp — FUSE 用于寫回磁盤的緩沖區的大小
VmallocTotal — vmalloc 區域大小
VmallocUsed — vmalloc 區域使用大小
VmallocChunk — vmalloc 區域大的 free 連續區塊大小
HardwareCorrupted — 系統檢測到內存的硬件故障的內存大小(問題頁會被記錄不再使用)
之前說過,HugePages 是獨立統計的,如果進程使用了 HugePages,是不會計入自身的RSS/PSS的。注意下面的AnonHugePages指的是透明大頁(THP,Transparent HugePages),THP是統計在進程的RSS/PSS里的,要注意區別。下面是相關的統計項:
AnonHugePages — 透明大頁 THP 使用的大小
HugePages_Total — 內存大頁的總量,對應 /proc/sys/vm/nr_hugepages,可以動態改
HugePages_Free — 內存大頁中 free 的大小
HugePages_Rsvd — 內存大頁中能分配出來的大小
HugePages_Surp — 內存大頁中超過 /proc/sys/vm/nr_hugepages的大小, 大值由/proc/sys/vm/nr_overcommit_hugepages限制
Hugepagesize — 內存大頁的頁大小
先介紹幾個通用概念:
VSS - Virtual Set Size,虛擬內存大小,包含共享庫占用的全部內存,以及分配但未使用內存
RSS - Resident Set Size,實際使用物理內存,包含了共享庫占用的全部內存
PSS - Proportional Set Size,實際使用的物理內存,共享庫占用的內存按照進程數等比例劃分
USS - Unique Set Size,進程獨自占用的物理內存,不包含共享庫占用的內存
在/proc/{pid}/smaps文件對應每個進程的詳細內存分段統計。截取一部分:
聊聊 Linux 的內存統計
下面分別解釋下含義:
Size:映射的大小(mapping size)
Rss:實際駐留在RAM的內存大小(包括共享庫的大小,不包括已經交換出去的頁面)
Pss:Rss 的基礎上,把共享庫的大小均攤給所有被映射的進程后的大小
Shared_Clean:共享的Clean內存的大小
Shared_Dirty:共享的Dirty內存的大小
Private_Clean:私有的Clean內存的大小
Private_Dirty:私有的Dirty內存的大小
Referenced:當前被標記為引用的頁的大小
Anonymous:匿名內存的大小
AnonHugePages:透明大頁內存的大小
Swap:Swap的大小
KernelPageSize:內核頁大小
MMUPageSize:MMU頁大小
Locked:被mlock的內存大小
VmFlags:頁的標志位,有點多這里不列舉,詳見參考資料 [4]
可以看到Rss這個指標實際上是包含了共享庫的大小的,不同的進程會共享這個映射的,如果想通過累加這個值來計算所有進程用到的內存的話就不準確了,而Pss把共享庫的大小均攤給了所有用到映射了這個庫的進程,所以累加起來就不會重復計算共享庫大小了。
P.S. 最新的內核文檔提到了要加smaps_rollup這個統計,支持Pss_Anon、Pss_File和Pss_Shmem三個分類統計,這個在進程級別看,用到內存就很清晰了。
我們可以累加一下這個值看看某進程用到的內存總和:
聊聊 Linux 的內存統計
注意單位是KB,所以這里進程用到的內存是 1.17 GB 左右。
這是個使用共享內存作為存儲的服務,所以這是符合預期的。如果想要看排除共享內存的部分,那要看Anonymous部分的總和:
聊聊 Linux 的內存統計
所以實際匿名內存使用是 63 MB 左右。
top命令中關于內存使用的統計:
聊聊 Linux 的內存統計
內存相關的統計有VIRT、RES、SHR、SWAP、CODE、DATA、USED
VIRT — Virtual Memory Size,虛擬內存大小,包括所有代碼、數據和共享庫,以及已交換的頁面和已映射但未使用的內存
RES — Resident Memory Size,駐留內存大小,共享的內存比如動態庫也會計算在內
SHR — Shared Memory Size,共享的內存大小,并非所有共享的內存都是常駐的
SWAP — Swapped Size,非駐留內存大小
CODE — Code Size,程序可執行代碼的大小
DATA — Data + Stack Size,可執行代碼以外的物理內存量,也稱為數據駐留集大小
USED — Memory in Use,RES + SWAP 的大小
常用的還有這些:vmstat、sar、slabtop、kmstat、ps、prstat、pmap等等。懶得寫了,有問題看man文檔得了。
[1] Understanding the Linux Kernel, Daniel Plerre Bovet / Marco Cesati, 2005-11
[2] Professional Linux Kernel Architecture, Wolfgang Mauerer, 2008-10-13
[3] Systems Performance: Enterprise and the Cloud, Brendan Gregg, 2013-10-26
[4] https://raw.githubusercontent.com/torvalds/linux/master/Documentation/filesystems/proc.txt
[5] https://en.wikipedia.org/wiki/Resident_set_size
[6] https://en.wikipedia.org/wiki/Proportional_set_size
[7] https://en.wikipedia.org/wiki/Unique_set_size

網站題目:聊聊 Linux 的內存統計
文章分享:http://www.js-pz168.com/news12/104462.html

成都網站建設公司_創新互聯,為您提供云服務器網站設計公司外貿網站建設服務器托管網站收錄網站維護

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
日韩有码一区二区三区| 99热在线播放| 精品国产一区二区三区日日嗨| 视频在线99re| 欧美一区二区久久| 亚洲欧洲中文日韩久久av乱码| 麻豆国产一区二区| 国产福利久久| 欧美午夜精品理论片a级按摩| 久久人人爽爽爽人久久久| 亚洲综合激情另类小说区| 国产精品夜夜爽| 欧美动漫一区二区| 在线成人午夜影院| 亚洲人成伊人成综合网小说| 黑人巨大精品欧美一区| 精品伦精品一区二区三区视频| 欧美在线三级电影| 中文文精品字幕一区二区| 美女视频网站久久| 国产亚洲自拍偷拍| 欧美福利视频导航| 亚洲精品成人少妇| 成人激情小说网站| 一区精品在线| 国产精品―色哟哟| 国产一区二区三区日韩| 欧美一区免费视频| 精品国产免费人成在线观看| 视频一区二区三区在线| 91在线看网站| 欧美日韩在线精品一区二区三区激情 | 国产精品一区二区三区四区| 欧美精品久久久| 日韩免费看网站| 天堂影院一区二区| 99国产超薄丝袜足j在线观看| 欧美性xxxxxxxx| 最新不卡av在线| 成人免费毛片高清视频| 色一区在线观看| 中文字幕在线不卡一区| 国产成人av电影在线| 亚洲激情电影在线| 国产精品美女久久久久久2018| 国产剧情一区在线| 亚洲一区三区视频在线观看| 中文子幕无线码一区tr| 成人做爰69片免费看网站| 色综合久久88色综合天天免费| 国产精品色呦呦| 成人黄色小视频在线观看| 欧美性生活大片视频| 亚洲综合清纯丝袜自拍| 高清不卡一区二区三区| 欧美一级二级在线观看| 蜜桃视频免费观看一区| 久久久久久久久久久久久久久久av| 精品日产卡一卡二卡麻豆| 久久er精品视频| 天天久久人人| 1000精品久久久久久久久| 97精品电影院| 欧美一级电影网站| 黑人精品欧美一区二区蜜桃| 亚洲电影免费| 日韩一区中文字幕| 91麻豆产精品久久久久久| 91精品国产色综合久久久蜜香臀| 日本三级亚洲精品| 午夜免费电影一区在线观看| 中文字幕日韩一区二区| 97av自拍| 久久综合九色综合欧美就去吻 | 欧美日韩国产综合一区二区三区| 亚洲午夜一二三区视频| 鲁片一区二区三区| 日本一区二区高清| 91视视频在线直接观看在线看网页在线看| 8x福利精品第一导航| 麻豆久久久久久| 一本色道a无线码一区v| 亚洲成av人片在线观看| 茄子视频成人在线观看| 亚洲视频一区在线观看| 国产精品精品软件视频| 日本一区二区三区电影| 97se亚洲国产综合自在线| 日韩免费视频线观看| 国产成人鲁色资源国产91色综 | 成人av电影在线观看| 欧美一级一级性生活免费录像| 久久99久久精品| 欧美亚洲一区二区在线| 日韩国产欧美在线播放| 一本一道久久a久久综合精品| 亚洲亚洲人成综合网络| 色99中文字幕| 亚洲一二三四久久| 亚洲欧美日韩精品久久久 | 91浏览器入口在线观看| 精品国产乱码久久久久久久| 成人aa视频在线观看| 日韩欧美一级二级| 成人黄色片在线观看| 精品少妇一区二区三区日产乱码| 成人h动漫精品一区二区| 精品国产污污免费网站入口 | 久久亚洲午夜电影| 亚洲色图色小说| 欧美一级爽aaaaa大片| 一区二区三区色| 亚洲国产一区在线| 日产国产高清一区二区三区| 色狠狠一区二区| 激情综合色丁香一区二区| 欧美蜜桃一区二区三区| 国产成人在线色| 久久伊人蜜桃av一区二区| 成人在线观看av| 亚洲欧美一区二区三区久本道91| 欧美成熟毛茸茸复古| 午夜影视日本亚洲欧洲精品| 日本丶国产丶欧美色综合| 国产自产高清不卡| 日韩精品综合一本久道在线视频| av影院午夜一区| 国产精品久久综合| 欧美日韩国产高清视频| 婷婷激情综合网| 欧美日韩一级黄| 成人激情文学综合网| 欧美激情一区不卡| 欧美连裤袜在线视频| 午夜精品久久久久久久久久| 欧美性三三影院| 成人精品视频一区| 国产精品毛片无遮挡高清| 色999五月色| 精品影院一区二区久久久| 日韩女优毛片在线| 国产伦精品一区二区三区照片| 亚洲激情第一区| 色8久久人人97超碰香蕉987| 国产酒店精品激情| 国产视频一区不卡| 欧美主播一区二区三区美女 久久精品人 | 国产精品二区二区三区| 亚洲精品乱码久久久久| 91国产成人在线| 成人爽a毛片一区二区免费| 国产精品午夜春色av| 亚洲精品一区二区三区四区五区| 激情综合色播激情啊| 久久久久久麻豆| 日本免费高清一区| 久久99热国产| 国产偷国产偷精品高清尤物| 色阁综合av| 国产黄色成人av| 综合中文字幕亚洲| 欧美视频自拍偷拍| 91美女片黄在线观看| 亚洲国产精品嫩草影院| 91精品国产综合久久精品图片 | 国产日韩三级在线| 亚洲国产一区二区在线 | 3d动漫精品啪啪一区二区竹菊| 91在线观看网站| 肉丝袜脚交视频一区二区| 日韩欧美高清在线| 日韩av一区二区三区在线 | 午夜精品久久久久久不卡8050| 91麻豆精品国产91久久久使用方法| 国产精品加勒比| 麻豆精品视频在线| 欧美激情中文字幕一区二区| 伊人狠狠色丁香综合尤物| 99久久99久久综合| 午夜视频在线观看一区二区三区| 欧美一级高清大全免费观看| 欧美日韩一区二区三区在线视频| 国产一区二区三区免费观看| 国产精品成人午夜| 欧美日韩国产综合久久| 精品亚洲欧美日韩| 精品亚洲成a人在线观看| 国产精品沙发午睡系列990531| 欧美专区日韩专区| 黄色一区三区| 国产美女视频一区| 亚洲精品第1页| 欧美草草影院在线视频| 亚洲精品无人区| 97超碰人人看人人| 精品亚洲成a人在线观看| 1区2区3区国产精品| 日韩一二三四区| 亚洲视频精品一区| 99久久久精品免费观看国产|