zoukankan      html  css  js  c++  java
  • 查看进程使用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"
  • 相关阅读:
    模糊查询(排除%等通配符并支持不连续关键字查询)
    ideal中运行manven常用操作
    ideal项目启动及问题
    FastJSON 转换List<T> ,Map<T,T>泛型失败 处理方法
    MySQL的SELECT ...for update
    CouchDB客户端开发—Java版
    Spring Data JPA 实例查询
    第一章 计算机网络概述
    第二章 物理层(二)
    Java常考面试题(一)
  • 原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/11911394.html
Copyright © 2011-2022 走看看