psutil模塊學習--進程和系統監控工具

介紹

我們可以通過topfreeiostatps等命令獲取服務器的內存、CPU、網絡、進程等信息。Python可以通過使用subprocess模塊去執行命令獲取這些信息,不過需要寫額外的解析代碼。
psutil庫提供這些系統信息,psutil = process and system utilities,可以跨平臺使用獲取CPU、內存、磁盤、網絡、傳感器等信息。
可以通過pip install psutil來安裝該模塊。

簡單使用

下面代碼可以在windows上運行,也可以在linux上運行

# -*- coding:UTF-8 -*-

"""
psutil使得Python程序獲取系統信息變得易如反掌。

psutil還可以獲取用戶信息、Windows服務等很多有用的系統信息,具體請參考psutil的官網:https://github.com/giampaolo/psutil
"""

import psutil
import os
import sys
from pprint import pprint

# 獲取CPU信息
cpu_ct = psutil.cpu_count()
print("邏輯CPU個數:", cpu_ct)
cpu_pysical_ct = psutil.cpu_count(logical=False)
print("物理CPU個數:", cpu_pysical_ct)
print("根據上面的結果可推出其超線程數是:", int(cpu_pysical_ct / cpu_ct))

cpu_times = psutil.cpu_times()
print("統計CPU的用戶/系統/空閒時間", cpu_times)

# 等價於 top -n 3 -d 5
for i in range(3):
    # 獲取CPU使用百分比信息
    cpu_percent = psutil.cpu_percent(interval=5, percpu=False)
    print(cpu_percent)

# 獲取內存信息
virtual_memory = psutil.virtual_memory()
# 物理內存
print("virtual_memory:", virtual_memory)
swap_memory = psutil.swap_memory()
# 交換內存
print("swap_memory:", swap_memory)

# 獲取磁盤信息
disk_partitions = psutil.disk_partitions()
pprint(disk_partitions)
# 獲取磁盤的使用情況,需要指定磁盤的掛載目錄
disk_usage = psutil.disk_usage("/")
print(disk_usage)
# 獲取磁盤IO統計數據 如果指定perdisk=True則返回每個磁盤的統計數據
disk_io_counters = psutil.disk_io_counters(perdisk=True)
print(disk_io_counters)

# 獲取網絡信息
net_io_counters = psutil.net_io_counters()
# 獲取網絡讀寫字節/包的個數
print(net_io_counters)
# 獲取網絡接口信息
net_if_addrs = psutil.net_if_addrs()
pprint(net_if_addrs)
# 獲取網絡接口狀態
net_if_stats = psutil.net_if_stats()
pprint(net_if_stats)
# 獲取當前網絡連接信息
net_connections = psutil.net_connections()
pprint(net_connections)

# 獲取進程信息
# 返回的是進程id的列表
pids = psutil.pids()
print("當前運行的進程個數:", len(pids))
# 獲取當前進程id
p = psutil.Process(os.getpid())
print("進程名: ", p.name())
print("進程exe絕對路徑: ", p.exe())
print("進程工作目錄: ", p.cwd())
print("進程啓動的命令行: ", p.cmdline())
print("父進程id: ", p.ppid())
print("父進程: ", p.parent())
print("子進程列表: ", p.children(recursive=False))
print("進程狀態: ", p.status())
print("進程所屬用戶: ", p.username())
print("進程啓動時間戳: ", p.create_time())
from datetime import datetime
datetime.fromtimestamp(p.create_time())

# 判斷是linux才查看進程終端,windows上會報錯
if sys.platform == "linux":
    print("進程終端: ", p.terminal())
print("進程使用的CPU時間: ", p.cpu_times())
print("進程使用的內存: ", p.memory_info())
# 進程使用的內存:  pmem(rss=77926400, vms=1930043392, shared=5652480, text=2482176, lib=0, data=1716023296, dirty=0)
#  ============================================================
# | FIELD  | DESCRIPTION                         | AKA  | TOP  |
#  ============================================================
# | rss    | resident set size                   |      | RES  |
# | vms    | total program size                  | size | VIRT |
# | shared | shared pages (from shared mappings) |      | SHR  |
# | text   | text ('code')                       | trs  | CODE |
# | lib    | library (unused in Linux 2.6)       | lrs  |      |
# | data   | data + stack                        | drs  | DATA |
# | dirty  | dirty pages (unused in Linux 2.6)   | dt   |      |
#  ============================================================

print("進程打開的文件: ", p.open_files())
print("進程相關網絡連接: ", p.connections())
print("進程的線程數量: ", p.num_threads())
# 所有線程信息
pprint(p.threads())
print("進程環境變量: ", p.environ())

# 模擬ps效果
psutil.test()

# 結束進程
print("即將自動結束進程")
p.terminate()

在這裏插入圖片描述
在這裏插入圖片描述

進階和參考網址

更多詳細的信息可以參考psutil官網
廖雪峯老師Python教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章