博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下检测每个进程占用swap大小
阅读量:6857 次
发布时间:2019-06-26

本文共 2467 字,大约阅读时间需要 8 分钟。

#!/bin/bash######################################### 脚本功能 : 列出正在占用swap的进程。########################################echo -e "PID\t\tSwap\tProc_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\t${swap}\t$proc_name"     fi fidone | sort -k2 -n | gawk -F'\t' '{  pid[NR]=$1; size[NR]=$2; name[NR]=$3;}END{ for(id=1;id<=length(pid);id++) {     if(size[id]<1024)           printf("%-10s\t%10sKB\t%s\n",pid[id],size[id],name[id]);     else if(size[id]<1048576)           printf("%-10s\t%10.2fMB\t%s\n",pid[id],size[id]/1024,name[id]);     else   printf("%-10s\t%10.2fGB\t%s\n",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 = 011                 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,size16         except:17                 #print "Erro"18                 pass19 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 name27         except:28                 pass29 if __name__=='__main__':30         print 'PID\tSWAP-SIZE\tNAME'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\t%s\t%s" % (info[0],info[1],get_name(pid))

 

转载于:https://www.cnblogs.com/xuxyblog/p/4801219.html

你可能感兴趣的文章
浙江省人民政府咨询委员会专访泰一指尚开展课题调研
查看>>
轻松应对双十一零点的DNS流量洪峰
查看>>
有了“全程管家” 还担心P2O吗?
查看>>
NetApp CMO:如何释放数据的潜能成为企业核心诉求
查看>>
避免勒索软件威胁的十大技巧
查看>>
中国人工智能学会通讯——人工智能将引发未来网络产业变革
查看>>
向奇汉:服务企业互联网化 打造社会化商业平台
查看>>
SaaS在线管进销存 安全不是问题
查看>>
《网络空间欺骗:构筑欺骗防御的科学基石》一1.6.1 目的:合法与被控制的凭证...
查看>>
IDC:2016年上半年宏杉科技同比增长47.3%
查看>>
嵌入式数据中心有望胜过超大规模数据中心?
查看>>
《中国人工智能学会通讯》——7.22 知识图谱应用的基本技术
查看>>
CloudCC:如何用CRM打造客户关系管理新模式
查看>>
安全走向开放 建安全架构协同互联生态体系
查看>>
Linux新手最容易跳进哪几个坑?
查看>>
Linux 平台下 Python 脚本编程入门(二)
查看>>
IBM罗睿兰:认知计算将带领医疗走向黄金时代
查看>>
移动医疗怎么才能跟护士愉快地玩耍?
查看>>
大数据流量:数据中心发展的瓶颈
查看>>
网络虚拟化之FlowVisor:网络虚拟层(上)
查看>>