zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mac系统终端的color scheme配置和vim配置
    用子网掩码划分子网
    堆排序
    面试遇到两个稍显变态的题目,mark一下
    移动端适配的问题
    移动端click事件延时
    行内元素之间间距的产生与去除
    JS怎么判断一个对象是否为空
    Java面向对象基础
    Java中的final关键字
  • 原文地址:https://www.cnblogs.com/litzhiai/p/14744814.html
Copyright © 2011-2022 走看看