告別繁瑣,用 psutil 簡(jiǎn)化你的 Python 系統(tǒng)監(jiān)控任務(wù)
在日常的開發(fā)工作中,系統(tǒng)監(jiān)控是不可或缺的一部分。無論你是需要監(jiān)控服務(wù)器的CPU使用率、內(nèi)存占用情況,還是跟蹤網(wǎng)絡(luò)連接,及時(shí)掌握系統(tǒng)的狀態(tài)都是至關(guān)重要的。然而,傳統(tǒng)的監(jiān)控方式往往涉及復(fù)雜的工具和冗長(zhǎng)的配置,耗時(shí)且容易出錯(cuò)。那么,如何在Python中簡(jiǎn)化這一過程呢?答案就是——psutil。
什么是psutil?
psutil,全名為Process and System Utilities,是一個(gè)跨平臺(tái)的Python庫(kù),用于方便地獲取系統(tǒng)運(yùn)行時(shí)的信息。無論是CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、還是系統(tǒng)進(jìn)程狀態(tài),psutil都能通過簡(jiǎn)潔的API一手掌握。
為什么選擇psutil?
- 輕量且功能強(qiáng)大:psutil庫(kù)非常輕量,不會(huì)給你的系統(tǒng)帶來額外的負(fù)擔(dān),同時(shí)它提供了豐富的功能,幾乎涵蓋了所有你能想到的系統(tǒng)監(jiān)控需求。
- 跨平臺(tái)支持:無論你是在Windows、Linux還是macOS上開發(fā),psutil都能無縫運(yùn)行。
- 簡(jiǎn)單易用的API:相比于其他工具,psutil的API設(shè)計(jì)得非常直觀、易用。只需幾行代碼,就可以完成復(fù)雜的系統(tǒng)監(jiān)控任務(wù)。
安裝psutil
安裝psutil非常簡(jiǎn)單,你可以使用Python的包管理工具pip來快速安裝。在命令行中執(zhí)行以下命令即可:
pip install psutil
該命令會(huì)自動(dòng)下載并安裝psutil及其所有依賴庫(kù)。一旦安裝完成,你就可以在Python腳本中導(dǎo)入psutil庫(kù)并開始使用它來獲取各種系統(tǒng)信息了。
安裝成功返回信息
基礎(chǔ)功能一覽
讓我們通過一些簡(jiǎn)單的例子,看看psutil如何簡(jiǎn)化系統(tǒng)監(jiān)控任務(wù)。
(1) 獲取CPU信息
import psutil
# 獲取CPU的使用率
cpu_usage = psutil.cpu_percent(interval=1)
print(f"當(dāng)前CPU使用率: {cpu_usage}%")
# 獲取每個(gè)CPU的使用率
cpu_usage_per_cpu = psutil.cpu_percent(interval=1, percpu=True)
print(f"每個(gè)CPU的使用率: {cpu_usage_per_cpu}")
上述代碼執(zhí)行成功后,如下圖所示:
獲取CPU信息
(2) 內(nèi)存監(jiān)控
# 獲取虛擬內(nèi)存信息
virtual_memory = psutil.virtual_memory()
print(f"總內(nèi)存: {virtual_memory.total / (1024**3):.2f} GB")
print(f"已使用內(nèi)存: {virtual_memory.used / (1024**3):.2f} GB")
print(f"剩余內(nèi)存: {virtual_memory.available / (1024**3):.2f} GB")
上述代碼執(zhí)行成功后,如下圖所示:
內(nèi)存監(jiān)控
(3) 磁盤使用情況
# 獲取磁盤分區(qū)信息
disk_usage = psutil.disk_usage('/')
print(f"磁盤總?cè)萘? {disk_usage.total / (1024**3):.2f} GB")
print(f"已使用: {disk_usage.used / (1024**3):.2f} GB")
print(f"剩余空間: {disk_usage.free / (1024**3):.2f} GB")
上述代碼執(zhí)行成功后,如下圖所示:
磁盤使用情況
(4) 網(wǎng)絡(luò)監(jiān)控
# 獲取網(wǎng)絡(luò)IO信息
net_io = psutil.net_io_counters()
print(f"發(fā)送字節(jié)數(shù): {net_io.bytes_sent / (1024**2):.2f} MB")
print(f"接收字節(jié)數(shù): {net_io.bytes_recv / (1024**2):.2f} MB")
上述代碼執(zhí)行成功后,如下圖所示:
網(wǎng)絡(luò)監(jiān)控
(5) 進(jìn)程管理
除了基礎(chǔ)的系統(tǒng)資源監(jiān)控,psutil還提供了強(qiáng)大的進(jìn)程管理功能,你可以輕松獲取、操作系統(tǒng)進(jìn)程。
# 獲取當(dāng)前運(yùn)行的進(jìn)程列表
processes = psutil.pids()
for pid in processes:
p = psutil.Process(pid)
print(f"PID: {pid}, 名稱: {p.name()}, 狀態(tài): {p.status()}")
你還可以通過psutil終止進(jìn)程、查看進(jìn)程的資源占用情況等等。與手動(dòng)編寫復(fù)雜的系統(tǒng)監(jiān)控腳本相比,psutil讓這一切變得更加簡(jiǎn)單直觀。如下圖所示:
進(jìn)程管理
系統(tǒng)巡檢
通過利用Python的psutil庫(kù),我們能夠?qū)崟r(shí)監(jiān)測(cè)主機(jī),精確獲取系統(tǒng)的CPU負(fù)載、內(nèi)存占用、磁盤I/O、網(wǎng)絡(luò)流量等關(guān)鍵健康指標(biāo)。結(jié)合自動(dòng)化工具,還可以對(duì)業(yè)務(wù)系統(tǒng)的主機(jī)資源利用率進(jìn)行批量巡檢,實(shí)現(xiàn)高效的系統(tǒng)管理和維護(hù)。巡檢結(jié)果如下圖:
巡檢結(jié)果
總結(jié)
對(duì)于開發(fā)者來說,簡(jiǎn)化系統(tǒng)監(jiān)控任務(wù)意味著節(jié)省時(shí)間、降低錯(cuò)誤率,并提高工作效率。psutil作為一款輕量級(jí)且功能強(qiáng)大的工具,不僅讓Python開發(fā)者能夠更方便地實(shí)現(xiàn)系統(tǒng)監(jiān)控,還能通過其豐富的API滿足各種復(fù)雜的監(jiān)控需求。如果你還在為繁瑣的系統(tǒng)監(jiān)控任務(wù)而煩惱,不妨試試psutil,它一定會(huì)成為你得力的助手。!
腳本獲取方式
上述腳本已經(jīng)上傳上傳到gitee,有需要的小伙伴可以自行獲取。gitee上的倉(cāng)庫(kù)主要是分享一些工作中常用的腳本。小伙伴可以frok或者watch倉(cāng)庫(kù),這樣有更新可以及時(shí)關(guān)注到。
倉(cāng)庫(kù)地址:https://gitee.com/didiplus/script