psutil = process and system utilities,
psutil是個跨平台庫,能夠輕松實現獲取系統運行的進程和系統利用率,包括CPU、內存、磁盤、網絡等信息。
Linux系統下的安裝
pip install psutil
現在開始看看它的使用
一 cpu
#查看邏輯cpu的個數
>>> psutil.cpu_count()
2
#查看物理cpu的個數
>>> psutil.cpu_count(logical=False)
2
>>> psutil.cpu_times_percent() #cpu的總使用情況
scputimes(user=0.0, nice=0.0, system=0.1, idle=99.9, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
>>> psutil.cpu_times_percent(percpu=True) #每個cpu的使用情況
[scputimes(user=0.0, nice=0.0, system=0.1, idle=99.9, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0),
scputimes(user=0.0, nice=0.0, system=0.1, idle=99.9, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)]
>>> psutil.cpu_percent() #cpu的使用率
0.1
#要查看cpu的負載呢,我們還是使用其他的命令吧
>>> import os
>>> os.getloadavg()
(0.01, 0.06, 0.06)
二 內存
#查看系統緩存的信息
>>> psutil.swap_memory()
sswap(total=536866816, used=0, free=536866816, percent=0.0, sin=0, sout=0)
>>> psutil.swap_memory().total #單位是字節
536866816
>>> psutil.swap_memory().total/1024 #swap總大小,以kb單位表示
524284
>>> psutil.swap_memory().free/1024 #空閑swap大小,以kb單位表示
524284
#統計內存使用情況
##############總內存 ,使用的,空閑 ,使用百分比,buffers ,cached 單位是字節
>>> for i in ['total','used','free','percent','buffers','cached']:
... ret=getattr(psutil.virtual_memory(),i)
... print(ret)
...
1514450944
227557376
852000768
25.5
3215360
431677440
三 磁盤
#獲取磁盤信息
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,seclabel,relatime,attr2,inode64,noquota'),
sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,seclabel,relatime,attr2,inode64,noquota')]
#獲取掛載點的分區信息,通過device去的話顯示有問題
>>> psutil.disk_usage("/boot")
sdiskusage(total=206213120, used=117985280, free=88227840, percent=57.2)
>>> psutil.disk_usage("/boot").percent
57.2
四 網卡
#獲取網卡ens33的IP地址
>>> psutil.net_if_addrs()['ens33'][0].address
'192.168.137.16'
#子網掩碼
>>> psutil.net_if_addrs()['ens33'][0].netmask
'255.255.255.0'
#查看網卡是否開啟
>>> psutil.net_if_stats()['ens33'].isup
True
#查看網卡的速率,命令有ifconfig,ethtool
>>> psutil.net_if_stats()['ens33'].speed
1000 #單位 Mb/s
五 網絡
#psutil.net_connections 查看網絡的連接情況
>>> for i in psutil.net_connections():
... if i.raddr: #判斷外部地址情況不為空的情況,避免raddr=()產生錯誤
... print(i.laddr.ip,i.laddr.port,i.raddr.ip,i.raddr.port,i.status,i.pid)
...
# 本地地址 ,端口,外部地址 ,外部端口, 連接情況 , pid
('192.168.137.16', 22, '192.168.137.1', 52783, 'ESTABLISHED', 1327)
('192.168.137.16', 22, '192.168.137.1', 52083, 'ESTABLISHED', 1189)
六進程
#進程的情況
>>> p=psutil.Process(1094) #1094是nginx的master進程
>>> p.num_threads() #打開的線程數,由於nginx是一個主進程和多個工作進程,因此都為1
1
>>> p.cwd() #進程的工作目錄路徑
'/'
>>> p.cmdline() #nginx的命令進程信息
['nginx:', 'master', 'process', '/usr/sbin/nginx']
>>> p.exe() #執行的命令
'/usr/sbin/nginx'
>>> p.is_running() #是否存活
True
>>> p.name() #進程名稱
'nginx'
>>> p.nice() #進程的nice值
0
>>> p.status() #狀態
'sleeping'
>>> p.threads() #它的線程情況
[pthread(id=1094, user_time=0.0, system_time=0.0)]
>>> p.ppid() #它的父進程
1
>>> p.username() #它的執行用戶
'root'
>>> p.memory_percent() #內存利用率
0.14280343701908643
>>> p.cpu_percent() #cpu利用率
0.0
>>> psutil.pid_exists(1111) #查看進程是否存在
False
>>> psutil.pid_exists(1094)
True