文章目錄
- ● 介紹
- ● 安裝
- ● 獲取系統基本資訊
- ○ 1、CPU
- ○ 2、MEMORY
- ○ 3、DISK
- ○ 4、NETWORK
- ○ 5、PROCESS
系列文章
https://blog.csdn.net/cpen_web/category_11089219.html
● 介紹
● process and system utilities
● 能夠輕松的實作獲取系統運行的行程和系統利用率(CPU、記憶體、磁盤、網路等)資訊,主要應用于系統監控
● 實作了同等命令命令列實作的功能:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等
● 跨平臺:linux、windows、OS X、FreeBSD和Sun Solaris等
● 主要功能包含:CPU、磁盤、記憶體、網路、行程
● 安裝
● 原始碼安裝:git clone https://github.com/giampaolo/psutil.git
cd psutil
python3 setup.py install
● 先安裝相關庫:yum install python3-devel,(用yum list |grep python|grep dev 找到包名), pip3 install psutil
● 匯入使用模塊:import psutil
[root@cPen_B ~]# yum list |grep python |grep dev
python36-devel.x86_64 3.6.8-2.module_el8.1.0+245+c39af44f @AppStream
[root@cPen_B ~]# yum install python36-devel.x86_64
[root@cPen_B ~]# pip3 install psutil
● 獲取系統基本資訊
○ 1、CPU
● psutil.cpu_count(,[logical]):默認回傳邏輯CPU的個數,當設定logical的引數為False時,回傳物理CPU的個數
● psutil.cpu_percent(,[percpu],[interval]):回傳CPU的利用率,percpu為True時顯示所有物理核心的利用率,interval不為0時,則阻塞時顯示interval執行的時間內的平均利用率
● psutil.cpu_times(,[percpu]):以命名元組(namedtuple)的形式回傳cpu的時間花費,percpu=True表示獲取每個CPU的時間花費
user:執行用戶行程的時間
system:執行內核行程時間
idle:閑置的時間
iowait:等待io操作的時間
irp:硬中斷時間
softirq:軟中斷時間
● psutil.cpu_times_percent(,[percpu]):功能和cpu_times大致相同,回傳耗時比例
● psutil.cpu_stats(): 以命名元組的形式回傳CPU的統計資訊,包括背景關系切換,中斷,軟中斷和系統呼叫次數
ctx_switches:背景關系切換次數
interrupts:中斷次數
soft_interrupts:軟中斷次數
syscalls:系統呼叫次數,linux上始終為0
● psutil.cpu_freq(): 回傳cpu頻率
# 示例1:回傳CPU個數
>>> import psutil
>>> psutil.cpu_count() # 注:回傳邏輯CPU個數
2
>>> psutil.cpu_count(logical=False) # 注:回傳物理CPU個數
2
# 示例2:CPU使用率 百分比利用率
>>> psutil.cpu_percent()
0.1
# 示例3:cpu_times
>>> psutil.cpu_times() # 注:花費的時間占用總時間的百分比
scputimes(user=105.27, nice=0.1, system=81.87, idle=69229.05, iowait=11.17, irq=0.0, softirq=5.25, steal=0.0, guest=0.0, guest_nice=0.0)
# 示例4:回傳每個核的利用率
>>> psutil.cpu_percent(percpu = True)
[0.1, 0.1]
○ 2、MEMORY
● virtual_memory():以命名元組的形式回傳記憶體使用情況,單位為位元組
total:總物理記憶體
available:可用記憶體,available ~free + buffers + cached
percent:使用率: percent = (total - available) / total * 100
used:使用的記憶體: used = total - free - buffers - cache
free:完全沒用使用記憶體
active:最近被訪問的記憶體
inactive:長時間未被訪問的記憶體
buffers:快取
cached:快取
slab:內核資料結構快取的記憶體
● swap_memory:以命名元組的形式回傳swap/memory使用情況,包含swap中頁的換入和換出
# 示例:virtual_memory
>>> psutil.virtual_memory()
svmem(total=3953979392, available=3447025664, percent=12.8, used=249577472, free=3045027840, active=350208000, inactive=329723904, buffers=2162688, cached=657211392, shared=12365824, slab=117297152)
○ 3、DISK
● psutil.disk_io_counters([perdisk]):以命名元組的形式回傳磁盤io統計資訊(匯總的),包括讀、寫的次數,讀、寫的位元組數等
● psutil.disk_partitions():磁盤掛載磁區資訊
device:磁區
mountpoint:掛載點
fstype:檔案系統格式(fat、ext4、 xfs)
opts:掛載引數
● disk_usage:磁盤使用情況,需要傳入一個路徑引數
>>> psutil.disk_usage(’/’)
sdiskusage(total=250685575168, used=103938019328, free=134242258944, percent=43.6)
● iostat:%util 數值越大越忙碌,到達了io瓶頸(安裝包:yum install sysstat)
# 示例1:磁盤掛載磁區資訊 disk_partitions
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/centos-root', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 示例2:磁盤使用情況 disk_usage
>>> psutil.disk_usage("/") # 注:需要接掛載點
sdiskusage(total=18238930944, used=2300264448, free=15938666496, percent=12.6)
○ 4、NETWORK
● psutil.net_io_counters([pernic]):以命名元組的形式回傳當前系統中每塊網卡的網路io統計資訊,包括收發位元組數,收發包的數量、出錯的情況和刪包情況,當pernic為True時,則列出所有網卡的統計資訊
● psutil.net_connections([kind]):以串列的形式回傳每個網路連接的詳細資訊(namedtuple)
fd:檔案描述符
family:地址簇,ipv4(AF_INET),ipv6
type:SOCK_STREAM(tcp)、udp
laddr:本地ip地址
raddr
status
pid
● psutil.net_if_addrs():以字典的形式回傳網卡的配置資訊,包括IP地址和mac地址、子網掩碼和廣播地址
● psutil.net_if_stats():回傳網卡的詳細資訊,包括是否啟動、通信型別、傳輸速度與mtu
mtu:最大傳輸單元
● psutil.users():以命名元組的方式回傳當前登陸用戶的資訊,包括用戶名,登陸時間,終端
● psutil.boot_time():以時間戳的形式回傳系統的啟動時間
# 示例1:psutil.users 以命名元組的方式回傳當前登陸用戶的資訊,包括用戶名,登陸時間,終端
>>> psutil.users() # 注:w、who命令
[suser(name='root', terminal='tty1', host='', started=1606217600.0, pid=708), suser(name='root', terminal='pts/0', host='192.168.0.42', started=1606361216.0, pid=5921), suser(name='root', terminal='pts/2', host='192.168.0.42', started=1606361216.0, pid=5942), suser(name='root', terminal='pts/6', host='192.168.0.42', started=1606354816.0, pid=5239), suser(name='root', terminal='pts/7', host='192.168.0.42', started=1606357120.0, pid=5312)]
# 示例2:net_if_addrs
>>> psutil.net_if_addrs() # 注:lo本地回環地址 127.0.0.1
{'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)], 'ens33': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.0.21', netmask='255.255.255.0', broadcast='192.168.0.255', ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::22d8:5740:d6d7:d1ff%ens33', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:0c:29:d1:80:fa', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
○ 5、PROCESS
● psutil.pids():以串列的形式回傳當前正在運行的行程
● psutil.pid_exists(1):判斷給點定的pid是否存在
● psutil.Process(1):對行程進行封裝,可以使用該類的方法獲取進行的詳細資訊,或者給行程發送信號
● psutil.process_iter():迭代當前正在運行的行程,回傳的是每個行程的Process物件
name:獲取行程的名稱
cmdline:獲取啟動行程的命令列引數
create_time:獲取行程的創建時間
uids:行程uid資訊
num_threads:開啟的執行緒數
exe:行程作業的絕對路徑
kill:發送SIGKILL信號結束行程
# 示例:process_iter 迭代當前正在運行的行程
>>> psutil.process_iter()
<generator object process_iter at 0x7f56eb912888>
>>> p = psutil.process_iter()
>>> next(p)
psutil.Process(pid=1, name='systemd', status='sleeping', started='01:52:52')

畢業快樂!
覺得寫的不錯的話,歡迎點贊+評論+收藏,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287260.html
標籤:其他
上一篇:基于LINUX下的多執行緒
