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))
原文地址:https://www.cnblogs.com/xuxyblog/p/4801219.html