运维联盟俱乐部

 找回密码
 立即注册
查看: 450|回复: 0

查看pid使用swap得情况

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2023-5-31 10:30:26 | 显示全部楼层 |阅读模式
    1.脚本
    1. #!/bin/bash
    2. #description: 这是一个检查哪些进程使用了SWAP分区的脚本
    3. do_swap () {
    4.   SUM=0
    5.   OVERALL=0
    6.   #获取进程目录
    7.   for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
    8.         #获取进程PID
    9.     PID=`echo $DIR | cut -d / -f 3`
    复制代码
    查看指定进程得swap
    1. #!/bin/bash
    2. #author: zclinux
    3. #script name: swap_sum.sh
    4. #version: v2
    5. #description: 查看具体进程占用多少swap
    6. #./swap_sum.sh /proc/`pidof xxx`/smaps

    7. SUM=0
    8. OVERALL=0
    9. file=$1
    10.   #获取进程的所有分区中SWAP值
    11.   for SWAP in `grep Swap $file 2>/dev/null| grep -v SwapPss | awk '{ print $2 }'`
    12.   do
    13.         #进程swap值求和
    14.     let SUM=$SUM+$SWAP
    15.   done
    16. #  echo " Swap used: $SUM - $PROGNAME"
    17.   #总共swap分区值求和
    18.   let OVERALL=$OVERALL+$SUM
    19. # echo "Overall swap used: $OVERALL"

    20. ## 可读性处理
    21. ## 小于1024kb直接输出
    22. if [ $OVERALL -le 1024 ];then
    23.         echo "Total swap is used: ${OVERALL}KB "

    24. ## 小于1024字节,转换为MB        
    25. elif [ $OVERALL -le 1048576 ];then
    26.         let sum=OVERALL/1024
    27.         echo "Total swap is used: ${sum}MB"

    28. ## 不存在复数,所以剩下1024*1024 转换为GB
    29. else
    30.         let sum=OVERALL/1048576
    31.         echo "Total swap is used: ${sum}GB"
    32. fi
    复制代码

    2.执行命令
    1. for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-4 14:35 , Processed in 0.048167 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表