欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用psutil實現(xiàn)系統(tǒng)監(jiān)控與資源管理

 更新時間:2025年05月16日 08:32:06   作者:蕭鼎  
這篇文章主要為大家詳細(xì)介紹了psutil?的各項功能,并結(jié)合實際代碼示例,展示如何用?Python?構(gòu)建自己的系統(tǒng)監(jiān)控工具,資源分析器和進程管理腳本等

在系統(tǒng)運維、資源監(jiān)控、性能分析、服務(wù)狀態(tài)診斷等領(lǐng)域,開發(fā)者常常需要獲取操作系統(tǒng)底層信息,如 CPU 使用率、內(nèi)存占用、磁盤讀寫、網(wǎng)絡(luò)傳輸、進程詳情等。雖然這些功能可以通過 shell 命令實現(xiàn),如 top、df、ps、iostat 等,但在自動化腳本和跨平臺開發(fā)中,使用 Python 腳本來完成這些任務(wù)更具靈活性和可移植性。

這正是 psutil 的用武之地 —— 一個功能強大的跨平臺系統(tǒng)監(jiān)控庫,可以輕松獲取各種系統(tǒng)資源狀態(tài)和進程信息,且支持 Linux、Windows、macOS 等平臺。

本文將深入講解 psutil 的各項功能,并結(jié)合實際代碼示例,展示如何用 Python 構(gòu)建自己的系統(tǒng)監(jiān)控工具、資源分析器、進程管理腳本等。

一、psutil 簡介

psutil 是“process and system utilities”的縮寫,它是一個 跨平臺的系統(tǒng)監(jiān)控庫,用于:

  • 獲取 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò) 等系統(tǒng)使用情況
  • 管理和獲取 進程信息
  • 實現(xiàn)任務(wù)監(jiān)控、資源追蹤和系統(tǒng)健康檢查
  • 提供類 Unix ps, top, df, netstat, lsof 等命令的功能接口

它的設(shè)計初衷是替代用 Python 封裝 shell 命令的繁瑣做法,提供一致、優(yōu)雅、性能優(yōu)異的 API。

二、安裝與基本使用

安裝方式

使用 pip 安裝非常簡單:

pip install psutil

安裝完成后,幾乎可以立即開始使用,無需額外配置。

快速示例:獲取當(dāng)前 CPU 使用率

import psutil

print("當(dāng)前 CPU 使用率:", psutil.cpu_percent(interval=1), "%")

cpu_percent() 表示在指定時間間隔內(nèi)(如 1 秒)測量 CPU 總體使用率。

三、CPU 信息監(jiān)控

1. 獲取 CPU 邏輯/物理核心數(shù)

print("物理核心數(shù):", psutil.cpu_count(logical=False))
print("邏輯核心數(shù):", psutil.cpu_count(logical=True))

2. 每個核心的使用率

import time

for _ in range(5):
    usage = psutil.cpu_percent(interval=1, percpu=True)
    print("每個核心使用率:", usage)

3. 獲取 CPU 時間信息

times = psutil.cpu_times()
print(f"user: {times.user}, system: {times.system}, idle: {times.idle}")

這個 API 提供了系統(tǒng)級的 CPU 時間分布。

四、內(nèi)存信息監(jiān)控

1. 獲取虛擬內(nèi)存使用情況

mem = psutil.virtual_memory()
print(f"總內(nèi)存: {mem.total / 1024 ** 3:.2f} GB")
print(f"已使用: {mem.used / 1024 ** 3:.2f} GB")
print(f"空閑: {mem.available / 1024 ** 3:.2f} GB")
print(f"使用率: {mem.percent}%")

2. 獲取 swap 交換分區(qū)信息

swap = psutil.swap_memory()
print(f"Swap 總量: {swap.total / 1024 ** 3:.2f} GB")
print(f"使用率: {swap.percent}%")

五、磁盤信息監(jiān)控

1. 獲取磁盤分區(qū)信息

partitions = psutil.disk_partitions()
for p in partitions:
    print(f"掛載點: {p.mountpoint}, 類型: {p.fstype}")

2. 獲取磁盤使用情況

usage = psutil.disk_usage('/')
print(f"總空間: {usage.total / 1024 ** 3:.2f} GB")
print(f"已用: {usage.used / 1024 ** 3:.2f} GB")
print(f"剩余: {usage.free / 1024 ** 3:.2f} GB")

3. 實時磁盤 IO 情況

io = psutil.disk_io_counters()
print(f"讀字節(jié): {io.read_bytes / 1024 ** 2:.2f} MB")
print(f"寫字節(jié): {io.write_bytes / 1024 ** 2:.2f} MB")

六、網(wǎng)絡(luò)信息監(jiān)控

1. 獲取網(wǎng)絡(luò) IO 情況

net = psutil.net_io_counters()
print(f"發(fā)送: {net.bytes_sent / 1024 ** 2:.2f} MB")
print(f"接收: {net.bytes_recv / 1024 ** 2:.2f} MB")

2. 獲取網(wǎng)卡信息

addrs = psutil.net_if_addrs()
for iface, infos in addrs.items():
    print(f"\n網(wǎng)卡: {iface}")
    for info in infos:
        print(f"  地址: {info.address} ({info.family})")

3. 當(dāng)前網(wǎng)絡(luò)連接

conns = psutil.net_connections(kind='inet')
for conn in conns[:5]:
    print(f"連接: {conn.laddr} -> {conn.raddr}, 狀態(tài): {conn.status}")

七、進程管理

1. 枚舉當(dāng)前所有進程

for proc in psutil.process_iter(['pid', 'name', 'username']):
    print(proc.info)

2. 獲取指定進程的詳細(xì)信息

p = psutil.Process(1)  # PID 1 通常是 init 或 systemd
print(f"名稱: {p.name()}")
print(f"路徑: {p.exe()}")
print(f"狀態(tài): {p.status()}")
print(f"CPU使用率: {p.cpu_percent(interval=1.0)}")
print(f"內(nèi)存使用: {p.memory_info().rss / 1024 ** 2:.2f} MB")

3. 操作進程(終止、掛起、恢復(fù))

p = psutil.Process(1234)
p.suspend()  # 掛起
p.resume()   # 恢復(fù)
p.terminate()  # 終止

注意:需要管理員權(quán)限或 root 權(quán)限才能操作其他用戶的進程。

八、構(gòu)建一個簡單的系統(tǒng)資源儀表板

你可以使用 psutil + rich 或 psutil + flask/streamlit 構(gòu)建漂亮的圖形或終端儀表盤。下面是一個簡單的終端監(jiān)控:

import psutil
import time
import os

def monitor():
    while True:
        os.system('cls' if os.name == 'nt' else 'clear')
        print("=== 實時系統(tǒng)資源監(jiān)控 ===")
        print(f"CPU 使用率: {psutil.cpu_percent()}%")
        mem = psutil.virtual_memory()
        print(f"內(nèi)存: {mem.used / 1024 ** 3:.2f} GB / {mem.total / 1024 ** 3:.2f} GB ({mem.percent}%)")
        net = psutil.net_io_counters()
        print(f"網(wǎng)絡(luò): 發(fā)送 {net.bytes_sent / 1024 ** 2:.2f} MB, 接收 {net.bytes_recv / 1024 ** 2:.2f} MB")
        time.sleep(1)

if __name__ == "__main__":
    monitor()

可以擴展為 Web 儀表盤,甚至接入 Grafana、Prometheus 進行數(shù)據(jù)上報。

九、高級用法與實踐案例

1. 編寫一個自動殺死高 CPU 占用進程的守護腳本

def auto_kill(threshold=80):
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
        try:
            if proc.info['cpu_percent'] > threshold:
                print(f"殺死高 CPU 進程: {proc.info}")
                psutil.Process(proc.info['pid']).terminate()
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            continue

2. 跨平臺性能分析工具

你可以用 psutil 收集數(shù)據(jù)并記錄日志:

import json
import datetime

def log_stats():
    stats = {
        "time": str(datetime.datetime.now()),
        "cpu": psutil.cpu_percent(),
        "mem": psutil.virtual_memory().percent,
        "disk": psutil.disk_usage('/').percent,
    }
    with open("syslog.json", "a") as f:
        f.write(json.dumps(stats) + "\n")

可用于機器長時間運行狀態(tài)監(jiān)控和可視化分析。

十、總結(jié)與展望

psutil 是一個非常成熟、穩(wěn)定、文檔完善的 Python 庫,它幾乎可以滿足你對操作系統(tǒng)資源訪問的一切需求,包括但不限于:

  • 任務(wù)管理器替代腳本
  • DevOps 運維工具
  • 系統(tǒng)性能分析
  • 自動化測試平臺
  • AI 訓(xùn)練任務(wù)資源調(diào)度

優(yōu)勢:

  • 跨平臺支持強(Windows/Linux/macOS)
  • API 直觀、結(jié)構(gòu)清晰
  • 文檔豐富、社區(qū)活躍
  • 可集成至各種 Python 工具鏈中

注意事項:

  • 某些操作(如殺死進程、訪問別的用戶進程)可能需要管理員權(quán)限
  • 大量遍歷系統(tǒng)進程時注意異常處理(AccessDenied, NoSuchProcess)

到此這篇關(guān)于Python使用psutil實現(xiàn)系統(tǒng)監(jiān)控與資源管理的文章就介紹到這了,更多相關(guān)Python psutil監(jiān)控系統(tǒng)與資源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python自動化實現(xiàn)的簡單使用

    python自動化實現(xiàn)的簡單使用

    本文主要介紹了python自動化實現(xiàn)的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python實現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】

    Python實現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】

    這篇文章主要介紹了Python實現(xiàn)的網(wǎng)頁截圖功能,結(jié)合實例形式分別描述了使用PyQt4組件與selenium組件進行網(wǎng)頁截圖操作的相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • 解析Python中的二進制位運算符

    解析Python中的二進制位運算符

    這篇文章主要介紹了解析Python中的二進制位運算符,是Python學(xué)習(xí)中的基本知識,需要的朋友可以參考下
    2015-05-05
  • python得到電腦的開機時間方法

    python得到電腦的開機時間方法

    今天小編就為大家分享一篇python得到電腦的開機時間方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python讀取英文文件并記錄每個單詞出現(xiàn)次數(shù)后降序輸出示例

    Python讀取英文文件并記錄每個單詞出現(xiàn)次數(shù)后降序輸出示例

    這篇文章主要介紹了Python讀取英文文件并記錄每個單詞出現(xiàn)次數(shù)后降序輸出,涉及Python文件讀取、字符串替換、分割以及字典遍歷、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Python將字庫文件打包成可執(zhí)行文件的常見方法

    Python將字庫文件打包成可執(zhí)行文件的常見方法

    在 Python 打包時,如果你想將字庫文件一起打包成一個可執(zhí)行文件,有幾種常見的方法,具體取決于你使用的打包工具,下面就跟隨小編一起了解下具體的實現(xiàn)方法吧
    2025-05-05
  • 深入探究PyTorch核心特性之自動求導(dǎo)和優(yōu)化

    深入探究PyTorch核心特性之自動求導(dǎo)和優(yōu)化

    在你已經(jīng)掌握了如何使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,接下來我們將深入探討PyTorch的兩個核心特性:自動求導(dǎo)(Autograd)和優(yōu)化(Optimization),這兩個特性在深度學(xué)習(xí)模型的訓(xùn)練過程中起著至關(guān)重要的作用,感興趣的同學(xué)一起來看看吧
    2023-07-07
  • Python matplotlib可視化實例解析

    Python matplotlib可視化實例解析

    這篇文章主要介紹了Python matplotlib可視化實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • django 實現(xiàn)簡單的插入視頻

    django 實現(xiàn)簡單的插入視頻

    這篇文章主要介紹了django 實現(xiàn)簡單的插入視頻,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 淺析Python基礎(chǔ)-流程控制

    淺析Python基礎(chǔ)-流程控制

    Python編程語言的作用非常強大,而且其應(yīng)用方便的特點也對開發(fā)人員起到了非常大的作用。在這里我們就可以先從Python流程控制關(guān)鍵字的相關(guān)概念開始了解,從而初步掌握這一語言的特點
    2016-03-03

最新評論