新聞中心
在計(jì)算機(jī)系統(tǒng)管理和應(yīng)用性能優(yōu)化中,監(jiān)控進(jìn)程的CPU、內(nèi)存和IO使用率是非常重要的任務(wù)。Python作為一種功能強(qiáng)大的編程語(yǔ)言,可以輕松地實(shí)現(xiàn)這些監(jiān)控任務(wù)。勇哥將介紹如何使用Python寫一個(gè)簡(jiǎn)單使用的監(jiān)控進(jìn)程的CPU、內(nèi)存和IO使用率的工具。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、蘄春網(wǎng)絡(luò)推廣、小程序開發(fā)、蘄春網(wǎng)絡(luò)營(yíng)銷、蘄春企業(yè)策劃、蘄春品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供蘄春建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
準(zhǔn)備工作
啥也不說(shuō),先裝庫(kù):psutil是一個(gè)跨平臺(tái)用于獲取系統(tǒng)信息(包括進(jìn)程信息)的流行庫(kù);安裝命令:
pip install psutil監(jiān)控CPU使用率
使用psutil庫(kù)可以輕松地監(jiān)控進(jìn)程的CPU使用率。以下是一個(gè)示例代碼,演示了如何監(jiān)控一個(gè)指定進(jìn)程的CPU使用率:
import psutil
import os
import time
def monitor_cpu(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
cpu_percent = process.cpu_percent(interval=1)
print(f"CPU 使用率: {cpu_percent}%")
if __name__ == "__main__":
target_process_id = os.getpid() # 替換為你要監(jiān)控的進(jìn)程ID
monitoring_duration = 60 # 監(jiān)控持續(xù)時(shí)間(秒)
monitor_cpu(target_process_id, monitoring_duration)通過(guò)cpu_percent() 獲取進(jìn)程的CPU使用率,然后調(diào)整interval參數(shù),控制采樣時(shí)間間隔,再加個(gè)循環(huán),就實(shí)現(xiàn)了不停獲取數(shù)據(jù)信息的小腳本,自己可以擴(kuò)展將結(jié)果寫入文件或者數(shù)據(jù)庫(kù)種用來(lái)持久化輸出了。
監(jiān)控內(nèi)存使用率
psutil庫(kù)的memory_info()方法可以獲取進(jìn)程的內(nèi)存占用,廢話不多說(shuō)上代碼:
import psutil
import os
import time
def monitor_memory(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
memory_info = process.memory_info()
memory_percent = process.memory_percent()
print(f"內(nèi)存使用量: {memory_info.rss / (1024 * 1024):.2f} MB")
print(f"內(nèi)存使用率: {memory_percent:.2f}%")
time.sleep(1)
if __name__ == "__main__":
target_process_id = os.getpid() # 替換為你要監(jiān)控的進(jìn)程ID
monitoring_duration = 60 # 監(jiān)控持續(xù)時(shí)間(秒)其中rss屬性可以獲取實(shí)際使用物理內(nèi)存,memory_info() 獲取進(jìn)程的內(nèi)存信息,簡(jiǎn)短的代碼就實(shí)現(xiàn)了內(nèi)存監(jiān)控,可以自己適當(dāng)擴(kuò)展了。
監(jiān)控IO使用率
psutil庫(kù)的io_counters()方法可以監(jiān)控進(jìn)程的IO操作,廢話不多說(shuō),上代碼:
import psutil
import os
import time
def monitor_io(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
io_counters = process.io_counters()
print(f"讀取字節(jié)數(shù): {io_counters.read_bytes}") # 要變成MB,需要除1024/1024
print(f"寫入字節(jié)數(shù): {io_counters.write_bytes}")
time.sleep(1)
if __name__ == "__main__":
target_process_id = os.getpid() # 替換為你要監(jiān)控的進(jìn)程ID
monitoring_duration = 60 # 監(jiān)控持續(xù)時(shí)間(秒)
monitor_io(target_process_id, monitoring_duration)io_counters()方法返回了進(jìn)程的IO計(jì)數(shù)器信息,可以讀取和寫入的字節(jié)數(shù)。
小工具代碼整合 上面3個(gè)小函數(shù)已經(jīng)實(shí)現(xiàn)了監(jiān)控我門常規(guī)的信息了,現(xiàn)在我們的要求是要同時(shí)監(jiān)控,而不是監(jiān)控完這個(gè)再監(jiān)控那個(gè),對(duì)吧。so 勇哥使用異步編程來(lái)簡(jiǎn)單帶大伙玩一下,完整代碼如下:
import asyncio
import time
import psutil
async def monitor_io(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
io_counters = process.io_counters()
print(f"讀取字節(jié)數(shù): {io_counters.read_bytes / 1024 / 1024} MB")
print(f"寫入字節(jié)數(shù): {io_counters.write_bytes / 1024 / 1024} MB")
await asyncio.sleep(1)
async def monitor_memory(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
memory_info = process.memory_info()
memory_percent = process.memory_percent()
print(f"內(nèi)存使用量: {memory_info.rss / (1024 * 1024):.2f} MB")
print(f"內(nèi)存使用率: {memory_percent:.2f}%")
await asyncio.sleep(1)
async def monitor_cpu(process_id, duration):
process = psutil.Process(process_id)
start_time = time.time()
while time.time() - start_time < duration:
cpu_percent = process.cpu_percent(interval=1)
print(f"CPU 使用率: {cpu_percent}%")
await asyncio.sleep(1)
async def main():
process_id = int(input("請(qǐng)輸入進(jìn)程ID:"))
duration = int(input("請(qǐng)輸入監(jiān)控時(shí)長(zhǎng)(秒):"))
tasks = [
monitor_io(process_id, duration),
monitor_memory(process_id, duration),
monitor_cpu(process_id, duration)
]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main()) 分享標(biāo)題:解密Python監(jiān)控進(jìn)程的黑科技:CPU、內(nèi)存、IO使用率一目了然!
本文URL:http://fisionsoft.com.cn/article/djdhjpg.html


咨詢
建站咨詢
