日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python统计httpd 进程的内存占用百分比

發(fā)布時(shí)間:2025/3/18 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python统计httpd 进程的内存占用百分比 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


本文結(jié)構(gòu):

  • 介紹用命令行如何統(tǒng)計(jì)內(nèi)存占用百分比

  • 介紹用python 如何通過讀取進(jìn)程文件,統(tǒng)計(jì)進(jìn)程的內(nèi)存總大小,然后計(jì)算占系統(tǒng)內(nèi)存的百分比


  • 第一部分:

    在linux 下,統(tǒng)計(jì)apache 進(jìn)程的內(nèi)存使用百分比,有很多方法:

    使用命令將所有apache 的進(jìn)程進(jìn)行統(tǒng)計(jì),然后相加,然后和系統(tǒng)的物理內(nèi)存相除,求百分比。

    1. 例如,用"ps ? -e "命令就可以看到所有進(jìn)程的詳細(xì)信息:

    如圖,"ps ? aux" 命令輸出的第六個(gè)字段就是某個(gè)進(jìn)程所占的物理內(nèi)存,單位是KB.然后就可以將需要的apache 進(jìn)程過濾出來,統(tǒng)計(jì)。


    最后,用free 就可以看到系統(tǒng)的總內(nèi)存:


    第二部分:

    2. 如果使用python 那么可以怎么實(shí)現(xiàn)?可以通過讀取文件,獲取各個(gè)apache 進(jìn)程的VmRSS(物理內(nèi)存)大小,以及系統(tǒng)的總內(nèi)存。


    2.1 通過什么文件查看進(jìn)程占用內(nèi)存的信息?

    在"/proc" 目錄下,那些數(shù)字目錄,就是代表系統(tǒng)中的一個(gè)進(jìn)程號的目錄,該進(jìn)程的狀態(tài)都在這個(gè)目錄下:

    例如進(jìn)入29845進(jìn)程的目錄,29845 這個(gè)進(jìn)程的狀態(tài)信息都可以在status 這個(gè)文件查看:

    然后,打開/proc/29845/status 文件:

    如上圖,VmRSS 這行就是內(nèi)存大小。


    2.2 如何獲取所有apache 的進(jìn)程id號?

    因?yàn)閍pache 通常都會fork 很多的子進(jìn)程,這些子進(jìn)程都會占用內(nèi)存。linux下有這樣一個(gè)命令"pidof".如果想查看系統(tǒng)里所有httpd 進(jìn)程的pid 號,可以執(zhí)行"pidof ?httpd", 發(fā)現(xiàn)它和"ps aux|grep httpd" 命令統(tǒng)計(jì)的pid號是一樣的:

    2.3 知道了apache 的pid 號,還有在什么文件查看內(nèi)存使用情況,就可以寫python 腳本了,先統(tǒng)計(jì)所有的pid號:

    #!/usr/bin/env??python"""filename:?10_httpd.py"""from?subprocess??import?Popen,?PIPE????#?因?yàn)橐獔?zhí)行l(wèi)inux?的命令,需要使用subprocess?模塊"""定義一個(gè)函數(shù),用于獲取所有的httpd?的pid號""" def??getPid():p?=?Popen(["pidof",?"httpd"],?stdout=PIPE,?stderr=PIPE)pids?=?p.stdout.read().split()??#通過管道,讀出的結(jié)果是字符串,然后用split分割,保存在一個(gè)listreturn?pidsif??__name__?==?"__main__"?:print?getPid()

    先測試一下,執(zhí)行python 10_httpd.py,輸出的結(jié)果,如圖,輸出了全部httpd 的pid 號。

    繼續(xù)完善腳本,統(tǒng)計(jì)所有httpd 的內(nèi)存,需要通過/proc/pid/status 文件:

    #!/usr/bin/env??python"""filename:?10_httpd.py"""from?subprocess??import?Popen,?PIPE????#?因?yàn)橐獔?zhí)行l(wèi)inux?的命令,需要使用subprocess?模塊 import??os"""定義一個(gè)函數(shù),用于獲取所有的httpd?的pid號""" def??getPid():p?=?Popen(["pidof",?"httpd"],?stdout=PIPE,?stderr=PIPE)pids?=?p.stdout.read().split()??#通過管道,讀出的結(jié)果是字符串,然后用split分割,保存在一個(gè)listreturn?pids""" 定義一個(gè)函數(shù),統(tǒng)計(jì)所有httpd?進(jìn)程的內(nèi)存 參數(shù):pids?是getPid()?返回的列表 """ def?parsePidFile(pids):sum?=?0for?i?in?pids:fn?=?os.path.join('/proc',?i,??'status')?#返回status文件的絕對路徑with?open(fn)?as?fd:for?line?in?fd:???if?line.startswith('VmRSS'):???#遍歷文件,找到以"VmRSS"開頭的行mem?=?int(line.split()[1])?#以空格分割,返回第二部分,內(nèi)存數(shù)sum?+=?membreakreturn?sum""" 函數(shù),打開"/proc/meminfo",獲取總的內(nèi)存 """ def???total_mem(fn):with?open(fn)?as?fd:for?line?in?fd:if?line.startswith("MemTotal"):total_memory?=?int(line.split()[1])return?total_memoryif??__name__?==?"__main__"?:pids?=?getPid()sum_mem?=?parsePidFile(pids)total_memory?=?total_mem("/proc/meminfo")?print??"Httpd?sum?memory?is:?%s?KB"?%?sum_memprint??"Mmeory?percent:?%.2f%%"?%?((sum_mem/float(total_memory))*100)

    測試一下,執(zhí)行 python 10_httpd.py, 輸出的結(jié)果:



    2.4 測試

    安裝一個(gè)elinks 工具,訪問apache 看看內(nèi)存百分比是否會增高,

    yum install elinks

    用elinks 訪問,模擬測試都是在本機(jī)進(jìn)行:

    elinks ? http://localhost

    然后再運(yùn)行python 10_httpd.py, 輸出結(jié)果:

    只要,apache 有訪問,占用的內(nèi)存就會升高。


    轉(zhuǎn)載于:https://blog.51cto.com/hellocjq/1864082

    總結(jié)

    以上是生活随笔為你收集整理的python统计httpd 进程的内存占用百分比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。