swap 查看進程占用swap


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

 

 

這里解釋下samps里面的內容:
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
那么查看你想要看的進程所使用的swap只需要:

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

 

 

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

 

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

 

 

參考:

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

 


免責聲明!

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



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