1. 程式人生 > >Linux /proc/$pid/smaps的含義

Linux /proc/$pid/smaps的含義

/proc/pid/smaps反應了執行時的程序的記憶體影響,系統的執行時庫(so),堆,棧資訊均可在其中看到。下面是libstdc++.so這個檔案在一個程序中的對映資訊,其中的Size表示線性地址空間大小,Rss表示時間佔用的實體記憶體大小.

Rss=Shared_Clean+Shared_Dirty+Private_Clean+Private_Dirty

其中的Shared_Clean/Shared_Dirty/Private_Clean/Private_Dirty究竟是什麼含義?

baidu和google後都沒有對此進行說明,對此也困惑了很近,在最近一次問題定位時又迷惑了,這才下決心看程式碼來才弄清楚。

(2)追根溯源

smaps的相關資訊是在proc檔案系統中儲存的,在proc的檔案系統中檢視smaps的實現,發現是通過呼叫show_smap來列印顯示資訊的。檔案:fs/proc/task_mmu.c

該函式傳遞的引數有一個seq_file的結構,網上搜索,這個東東實質為了取procfs中的內容來設計的,當procfs的內容中大於一個page時,procfs會較慢並且可能出現異常。而seq_file能解決上述的問題。檢視這段程式碼可以發現smaps的資訊實質是儲存在mss變數中,而mss變數是在walk_page_range來進行計算並填充。walk_page_range的功能如下,就是遍歷頁表,並呼叫回撥函式進行處理。

回撥函式都是定義在mm_walk中。

現在linux的記憶體管理的頁表分了4級目錄:頁全域性目錄,頁上級目錄,頁中間目錄,頁表目錄,上面的函式分別對應了上面各級頁表目錄處理的的回撥函式。而show_smaps函式始終是定義了一個頁中間目錄處理的回撥函式:

那就看smaps_pte_range的實現,實質就是對頁中間目錄對應的頁表一個個的掃描:

再往下看就找到了shared/private是如下計算的,可以看出首先是檢視該page的引用數,如果引用>1,則歸為shared,如果是1,則歸為private,同時也檢視該page的flag,是否標記為_PAGE_DIRTY,如果不是,則認為乾淨的。

至此,這個疑惑終於解開了。

(3)結論

檢視該page的引用數,如果引用>1,則歸為shared,如果是1,則歸為private,同時也檢視該page的flag,是否標記為_PAGE_DIRTY,如果不是,則認為乾淨的。

相關推薦

Linux /proc/$pid/smaps含義

/proc/pid/smaps反應了執行時的程序的記憶體影響,系統的執行時庫(so),堆,棧資訊均可在其中看到。下面是libstdc++.so這個檔案在一個程序中的對映資訊,其中的Size表示線性地址空間大小,Rss表示時間佔用的實體記憶體大小. Rss=Shared_Clean+Shared_Dirty+

Linux /proc/pid目錄下相應文件的信息說明和含義

調用 port 利用 code 就是 fin CA abc IV Proc是一個虛擬文件系統,在Linux系統中它被掛載於/proc目錄之上。Proc有多個功能 ,這其中包括用戶可以通過它訪問內核信息或用於排錯,這其中一個非常有 用的功能,也是Linux變得更加特別的功能就

linux proc

發送 ndb rest 字節 data 通過 cnblogs nmp net /proc/net/dev 最左邊的表示接口的名字,Receive表示收包,Transmit表示收包; bytes表示收發的字節數; packets表示收發正確的包量; errs表示收發錯誤的包

Linux默認日誌含義

ont http boot sendmai clas var 使用 ron blog Linux系統日誌: /var/log/secure∶ 記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中; /var/log

linux---文件顏色含義

不同類 lin linux AR linu 鏈接 highlight 類型 執行 下面是linux系統約定不同類型文件默認的顏色: 白色:表示普通文件 藍色:表示目錄 綠色:表示可執行文件 紅色:表示壓縮文件 淺藍色:鏈接文

Linux 根據PID找到相應應用程序的運行目錄

12px pid tro 應用程序 exe ont span server 運行程序 1.找到運行程序的PID # ps aux | grep redis root 1210 0.0 0.0 103336 900 pts/0 S+ 09:32

Ubuntu:Linux 各個目錄的含義

ubuntu軟體管理跟windows不同!ubuntu安裝的程式都是標準路徑,也就是並不是在一個位置,而是分散在系統各個資料夾中,重要資料夾解析如下:  / ;linux系統的根目錄,是系統的最頂層。  /bin ;裡面是系統最基本的二進位制命令檔案如ls cp rm l

linux通配符含義

一級目錄 () 功能 輸入 失敗 linux通配符 {} 分隔符 解析 linux通配符含義: . 當前目錄**** .. 當前目錄的上一級目錄**** * 通配符,代表任意0個或多個字符***** ? 通配符,代表重復0個或一個0前面的字符

Linux根目錄下檔名含義

  /bin 構建最小系統所需要的命令(最常用的命令)   /boot 核心與啟動檔案   /dev 各種驅動檔案   /etc 系統軟體的啟動和配置檔案   /home 使用者的主目錄   /lib  C編譯器的庫   /media  可移動介質的安裝點   /opt 可選的應用軟體包  

Linux目錄結構的含義

1、Linux 的主目錄 2、各個資料夾分析 **/bin:是Binary的縮寫, 這個目錄存放著最經常使用的命令 /opt:這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個ORACLE資料庫則就可以放到這個目錄下。預設是空的。 /usr: 這是一個非常重

linux版本號的含義

在linux下有一個目錄,即/usr/src/kernels/目錄,下面記載著一個linux系統的核心檔案, 例如:2.6.18-164.el5-x86_64、2.6.18-8.el5-x86_64和2.6.18-194.el5-x86_64等,這些檔案編號意味著什麼呢?例

Linux 檔案許可權的含義

檔案的許可權是這樣子分配的 1. 讀 寫 可執行 分別對應的是 r w x 如果沒有那一個許可權,用 - 代替 2. 分了三個類別的許可權,分別是: 檔案所屬主 檔案所屬組 其他使用者 所以你寫出來的許可權是 檔案所屬者有讀和寫的許可權,檔案所屬組也有讀和寫的許可權,然後其

python程式碼獲取linux程序pid

python程式碼獲取linux程序pid 在某些需求中,我們需要根據某些條件動態的執行或者停止某程式(linux環境下),對於動態執行,一般沒有什麼難度。 開始某程式:需要知道程式的路徑,以及對應的.py檔案 os.system(‘cd {} && p

[譯]指定程序更新/proc/pid/smaps中PSS值得頻率是多久?

問題: 如果n個程序共享大小為M的庫L,那麼它們對PSS的貢獻是M/n。 現在假定一個程序終止了,那麼貢獻值變成M/(n-1)。 Q1:我的問題是這種變化在多久反映到仍然執行和使用共享庫的程序的PSS值? Q2:作為一個普通情況,假定只有兩個程序使用大小

linuxpid,tid, 以及 真實pid的關係

1、pid,tid,真實pid的使用 程序pid: getpid() 執行緒tid: pthread_self() //程序內唯一,但是在不同程序則不唯一。 執行緒pid: syscall(SYS_gettid) //系統內

Linux proc/pid/task/tid/stat檔案詳解

[[email protected] ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 140

Linux通過PID檢視程序完整資訊

通過ps及top命令檢視程序資訊時,只能查到相對路徑,查不到的程序的詳細資訊,如絕對路徑等。 先通過top檢視程序PID 這時,我們需要通過以下的方法來檢視程序的詳細資訊: Linux在啟動一個程序時,系統會在/proc下建立一個以PID命名的資料夾,在該資料夾下會有我們的程序的資訊,其中包括一

linux系統檔名顏色含義

在Linux中,檔案的顏色都是有含義的,檔名顏色不同,代表檔案型別不一樣。 淺藍色:表示連結檔案;  灰色:表示其他檔案;  綠色:表示可執行檔案;  紅色:表示壓縮檔案;  藍色:表示目錄;  紅色閃爍:表示連結的檔案有問題了;  黃色:表示

linux ipcs欄位含義 共享記憶體刪除 ipcs dest狀態

//檢視共享記憶體 [[email protected] shell]$ ipcs  ------ Shared Memory Segments -------- key        shmid      owner      perms      bytes

Linux 下各文件夾的含義

安裝 默認 系統管理 臨時文件 存儲 linu bsp 端口 啟動 /bin 該目錄中存放Linux的常用命令。/boot 該目錄默認下存放的是Linux的啟動文件和內核。/cdrom 該目錄在剛安裝系統時是空的,你可以將光驅文件系統掛在這個目錄下。/dev 該目錄包含了L