zoukankan      html  css  js  c++  java
  • linux下检测每个进程占用swap大小

    #!/bin/bash
    ########################################
    # 脚本功能 : 列出正在占用swap的进程。
    ########################################
    echo -e "PID		Swap	Proc_Name"
     
    # 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)
    for pid in `ls -l /proc|awk '/^d/ {print $NF}'|grep ^[0-9]`
    do
    
     # Do not check init process
     if [ $pid -eq 1 ];then continue;fi 
    
     # 判断改进程是否占用了swap
     grep -q "Swap" /proc/$pid/smaps 2>/dev/null
    
     if [ $? -eq 0 ];then # 如果占用了swap
         swap=$(grep Swap /proc/$pid/smaps| gawk '{ sum+=$2} END{ print sum }')
    
         # 进程名
         #proc_name=$(ps aux | grep -w "$pid" | grep -v grep 
         proc_name=$(ps -eo pid,comm | grep -w "$pid" | grep -v grep|awk '{print $NF}')
    
         if [ $swap -ge 0 ];then # 如果占用了swap则输出其信息
             echo -e "$pid	${swap}	$proc_name"
         fi
     fi
    done | sort -k2 -n | gawk -F'	' '{ 
     pid[NR]=$1;
     size[NR]=$2;
     name[NR]=$3;
    }
    END{
     for(id=1;id<=length(pid);id++)
     {
         if(size[id]<1024)
               printf("%-10s	%10sKB	%s
    ",pid[id],size[id],name[id]);
         else if(size[id]<1048576)
               printf("%-10s	%10.2fMB	%s
    ",pid[id],size[id]/1024,name[id]);
         else
       printf("%-10s	%10.2fGB	%s
    ",pid[id],size[id]/1048576,name[id]);
     }
    }'
     1 #!/usr/bin/env python
     2 import re,os
     3 #Swap: 0 kB
     4 def check_swap(pid):
     5         try:
     6                 f_name='/proc/'+pid+'/smaps'
     7                 f = open(f_name)
     8                 lines=f.readlines()
     9                 f.close()
    10                 size = 0
    11                 pattern=r'Swap:s+(d+)'
    12                 for line in lines:
    13                         if re.compile(pattern).findall(line):
    14                                 size += int(re.compile(pattern).findall(line)[0])
    15                 return pid,size
    16         except:
    17                 #print "Erro"
    18                 pass
    19 def get_name(pid):
    20         try:
    21                 f_name='/proc/'+pid+'/status'
    22                 f = open(f_name)
    23                 line=f.readline()
    24                 f.close()
    25                 name = line.split(':')[-1].split()[0] 
    26                 return name
    27         except:
    28                 pass
    29 if __name__=='__main__':
    30         print 'PID	SWAP-SIZE	NAME'
    31         print os.getpid()
    32         print '----------------'
    33         for pid in os.listdir('/proc'):
    34           if pid.isdigit(): 
    35                 info = check_swap(pid)
    36                 if (info[1]>0) :#and info[-1]:
    37                         print "%s	%s	%s" % (info[0],info[1],get_name(pid))
  • 相关阅读:
    windows7管理员权限
    Linux编程 第一个Hello World的C程序
    初步接触XCode和IPhone Simulator
    Android调用WCF
    mysql常用命令
    怎样利用Python制作守护进程
    Android模拟器如何设置DNS访问局域网内网站
    ubuntu下mysql攻略
    IIS7快速启动
    内存出错有时候是free后没有给指针赋NULL
  • 原文地址:https://www.cnblogs.com/xuxyblog/p/4801219.html
Copyright © 2011-2022 走看看