查看進程使用swap的狀態


轉自https://blog.csdn.net/xiangliangyu/article/details/8213127

在Linux內核 2.6.16中引入了一個系統內存接口特性,這個接口位於/proc/$pid/目錄下的smaps文件中 ,一看內容發現是進程內存映像信息,比同一目錄下的maps文件更詳細些。

cat /proc/1/smaps

 

 命令會返回很多上圖中的信息,這里給出各字段解釋:

  • bfdca000-bfddf000 是該虛擬內存段的開始和結束位置
  • rw-p 內存段的權限,rw是指可讀寫,p是指私有,如果是s則為共享
  • bffea000 該虛擬內存段在對應的映射文件中的偏移量
  • 00:00 文件的主設備和次設備號
  • 0 被映射到虛擬內存的文件的索引節點號
  • [stack] 被映射到虛擬內存的文件名稱
  • Size 是進程使用內存空間,並不一定實際分配了內存(VSS)
  • Rss是實際分配的內存(不需要缺頁中斷就可以使用的)
  • Shared_Clean 和其他進程共享的未改寫頁面
  • Shared_Dirty 和其他進程共享的已改寫頁面
  • Private_Clean 未改寫的私有頁面頁面
  • Private_Dirty 已改寫的私有頁面頁面
  • Swap 存在於交換分區的數據大小(如果物理內存有限,可能存在一部分在主存一部分在交換分區)
  • Pss是平攤計算后的使用內存(有些內存會和其他進程共享,例如mmap進來的)

那么查看你想要看的進程所使用的swap只需要:

awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps  

也可以寫shell統計所以進程的:

#!/bin/bash  
# Get current swap usage for all running processes  
# writted by xly  
  
function getswap {  
SUM=0  
OVERALL=0  
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do  
PID=`echo $DIR | cut -d / -f 3`  
PROGNAME=`ps -p $PID -o comm --no-headers`  
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`  
do  
let SUM=$SUM+$SWAP  
done  
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"  
let OVERALL=$OVERALL+$SUM  
SUM=0  
  
done  
echo "Overall swap used: $OVERALL"  
}  
  
getswap  
#getswap|egrep -v "Swap used: 0"

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM