统计apache进程占用的物理内存

[root@133~]#psaux|grephttpdroot136980.00.01856284356?Ss17:120:00/usr/sbin/httpdapache137050.30.129350427340?S17:120:00/usr/sbin/httpdapache137060.30.129350427324?S17:120:00/usr/sbin/httpdapache137070.30.129350427324?S17:120:00/usr/sbin/httpdapache137080.30.129350427324?S17:120:00/usr/sbin/httpdapache137090.30.129350427324?S17:120:00/usr/sbin/httpdapache137100.30.129350427328?S17:120:00/usr/sbin/httpdapache137110.30.129350427324?S17:120:00/usr/sbin/httpdapache137120.30.129350427324?S17:120:00/usr/sbin/httpdroot138310.00.0103320908pts/6S+17:150:00grephttpd#使用pidof查看所有httpd的进程号[root@133~]#pidofhttpd137121371113710137091370813707137061370513698[root@133~]#cd/proc/13698#apache的主进称,其它都是子进称[root@13313698]#catstatusName:httpdState:S(sleeping)Tgid:13698Pid:13698PPid:1TracerPid:0Uid:0000Gid:0000Utrace:0FDSize:64Groups:0VmPeak:185628kBVmSize:185628kBVmLck:0kBVmHWM:4356kBVmRSS:4356kB#这是该进称占用的物理内存VmData:1812kBVmStk:88kBVmExe:336kBVmLib:9964kBVmPTE:376kBVmSwap:0kB

那么将所有httpd的进程所占用的物理内存之和统计出来,即可统计出apache服务占用的所有内存


In[15]:fromsubprocessimportPopen,PIPEIn[16]:p=Popen(['pidof','httpd'],stdout=PIPE,stderr=PIPE)In[22]:p.stdout.read().split()Out[22]:['13712','13711','13710','13709','13708','13707','13706','13705','13698']



测试

[root@133systeminformation]#vim10_httpd.py#!/usr/bin/envpythonimportosimportsubprocessfromsubprocessimportPopen,PIPEdefgetPid():p=Popen(['pidof','httpd'],stdout=PIPE,stderr=PIPE)pids=p.stdout.read().split()printpids#打印httpd进称号returnpidsdefparsePidFile(pids):sum=0foriinpids:fn=os.path.join('/proc/',i,'status')printfn#打印文件路径withopen(fn)asfd:forlineinfd:ifline.startswith('VmRSS'):http_mem=int(line.split()[1])printhttp_mem#打印每个进称占用的内存,单位ksum+=http_mem#计算httpd占用的总内存breakreturnsumif__name__=='__main__':pids=getPid()printparsePidFile(pids)[root@133systeminformation]#python10_httpd.py['18547','18546','18545','18544','18543','18542','18541','18540','18533']/proc/18547/status41404/proc/18546/status41364/proc/18545/status58100/proc/18544/status41388/proc/18543/status41372/proc/18542/status41376/proc/18541/status58100/proc/18540/status41416/proc/18533/status4348368868#httpd占用的总内存,单位kb


计算所有的httpd进称占用的物理内存,(VmRSS)的大小,占所有物理内存的比例。

/proc/meminfo

[root@133systeminformation]#vim/proc/meminfoMemTotal:20455792kB[root@133systeminformation]#vim10_httpd.py#!/usr/bin/envpythonimportosimportsubprocessfromsubprocessimportPopen,PIPEdefgetPid():p=Popen(['pidof','httpd'],stdout=PIPE,stderr=PIPE)pids=p.stdout.read().split()returnpidsdefparsePidFile(pids):sum=0foriinpids:fn=os.path.join('/proc/',i,'status')withopen(fn)asfd:forlineinfd:ifline.startswith('VmRSS'):http_mem=int(line.split()[1])sum+=http_membreakreturnsumdeftotal_mem(f):withopen(f)asfd:forlineinfd:ifline.startswith('MemTotal'):total_mem=int(line.split()[1])returntotal_memif__name__=='__main__':pids=getPid()http_mem=parsePidFile(pids)total_mem=total_mem('/proc/meminfo')print"Apachememoryis:%sKB"%http_memprint"Totalmemoryis:%sKB"%total_memprint"Percent:%.2f%%"%(http_mem/float(total_mem)*100)[root@133systeminformation]#python10_httpd.pyApachememoryis:435760KBTotalmemoryis:20455792KBPercent:2.13%