psutil模塊
1.介紹
psutil是一個跨平台庫(http://code.google.com/p/psutil/),能夠輕松實現獲取系統運行的進程和系統利用率(包括CPU、內存、磁盤、網絡等)信息。
它主要應用於系統監控,分析和限制系統資源及進程的管理。它實現了同等命令行工具提供的功能
如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。
目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系統。
2.安裝
wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz tar -xzvf psutil-2.0.0.tar.gz cd psutil-2.0.0 python setup.py install
3.使用
CPU相關
查看cpu信息
import Psutil 查看cpu所有信息 >>> psutil.cpu_times() scputimes(user=11677.09, nice=57.93, system=148675.58, idle=2167147.79, iowait=260828.48, irq=7876.28, softirq=0.0, steal=3694.59, guest=0.0, guest_nice=0.0)
顯示cpu所有邏輯信息
>>> psutil.cpu_times(percpu=True)
[scputimes(user=11684.17, nice=57.93, system=148683.01, idle=2168982.08, iowait=260833.18, irq=7882.35, softirq=0.0, steal=3697.3, guest=0.0, guest_nice=0.0)]
查看用戶的cpu時間比
>>> psutil.cpu_times().user
11684.4
查看cpu邏輯個數
>>> psutil.cpu_count()
1
查看cpu物理個數
>>> psutil.cpu_count(logical=False)
1
查看系統內存
>>> import psutil >>> mem = psutil.virtual_memory() >>> mem
系統內存的所有信息
svmem(total=1040662528, available=175054848, percent=83.2, used=965718016, free=74944512, active=566755328, inactive=59457536, buffers=9342976, cached=90767360)
系統總計內存
>>> mem.total
1040662528
系統已經使用內存
>>> mem.used
965718016
系統空閑內存
>>> mem.free
112779264
獲取swap內存信息
>>> psutil.swap_memory()
sswap(total=0, used=0, free=0, percent=0, sin=0, sout=0)
讀取磁盤參數
磁盤利用率使用psutil.disk_usage方法獲取
磁盤IO信息包括read_count(讀IO數),write_count(寫IO數)
read_bytes(IO寫字節數),read_time(磁盤讀時間),write_time(磁盤寫時間),這些IO信息用
psutil.disk_io_counters()
獲取磁盤的完整信息
psutil.disk_partitions()
獲取分區表的參數
psutil.disk_usage('/') #獲取/分區的狀態
獲取硬盤IO總個數
psutil.disk_io_counters()
獲取單個分區IO個數
psutil.disk_io_counters(perdisk=True) #perdisk=True參數獲取單個分區IO個數
讀取網絡信息
網絡信息與磁盤IO信息類似,涉及到幾個關鍵點,包括byes_sent(發送字節數),byte_recv=xxx(接受字節數),
pack-ets_sent=xxx(發送字節數),pack-ets_recv=xxx(接收數據包數),
獲取網絡總IO信息
psutil.net_io_counters()
輸出網絡每個接口信息
psutil.net_io_counters(pernic=True) #pernic=True
獲取當前系統用戶登錄信息
psutil.users()
獲取開機時間
psutil.boot_time() #以linux時間格式返回 datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S") #轉換成自然時間格式
系統進程管理
獲取當前系統的進程信息,獲取當前程序的運行狀態,包括進程的啟動時間,查看設置CPU親和度,內存使用率,IO信息socket連接,線程數等
獲取進程信息
查看系統全部進程
psutil.pids()
查看單個進程
p = psutil.Process(2423) p.name() #進程名 p.exe() #進程的bin路徑 p.cwd() #進程的工作目錄絕對路徑 p.status() #進程狀態 p.create_time() #進程創建時間 p.uids() #進程uid信息 p.gids() #進程的gid信息 p.cpu_times() #進程的cpu時間信息,包括user,system兩個cpu信息 p.cpu_affinity() #get進程cpu親和度,如果要設置cpu親和度,將cpu號作為參考就好 p.memory_percent() #進程內存利用率 p.memory_info() #進程內存rss,vms信息 p.io_counters() #進程的IO信息,包括讀寫IO數字及參數 p.connectios() #返回進程列表 p.num_threads() #進程開啟的線程數 聽過psutil的Popen方法啟動應用程序,可以跟蹤程序的相關信息 from subprocess import PIPE p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE) p.name() p.username()
python系統性能模塊筆記
內存信息 psutil.cpu_times() 使用cpu_times方法獲取cpu完整信息,需要顯示所有邏輯cpu信息(指定變量percpu=True) psutil.cpu_times().user 獲取單項數據信息,如用戶user的cpu時間比 psutil.cpu_count() 獲取cpu邏輯個數,默認logical=True4 psutil.cpu_count(logical=False) 獲取cpu的物理信息 磁盤信息 psutil.disk_partitions() 使用psutil.disk_partitions方法獲取磁盤完整信息 psutil.disk_usage('/') 使用psutil.disk_usage方法獲取分區(參數)的使用情況 psutil.disk_io_counters() 使用psutil.disk_io_counters獲取硬盤中的IO個數 psutil.disk_io_counters(perdisk=True) perdisk=True,參數獲取單個分區IO個數 網絡信息 psutil.net_io_counters() 使用Psutil.net_io_counters獲取網絡中的IO信息,默認pernic=False,True時輸出每個網絡結構的IO信息 其他系統信息 psutil.users() 使用psutil.users方法返回當前登錄系統的用戶信息 psutil.boot_time() 使用psutil.boot_time方法獲取開機時間,以Linux時間戳格式返回 import psutil,datetime datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d%H:%M:%S") 轉換成自然時間格式 系統進程管理 psutil.pids() 列出所有進程的PID psutil.Process(*) 實例化一個Process對象,參數為一進程PID p=pstuil.Process() p.name() 進程名 p.exe() 進程bin路徑,windows下為p.exe p.cwd() 進程工作目錄絕對路徑,win下為p,cwd p.status() 進程狀態 p.create_time() 進程創建時間,時間戳格式 p.uids() 進程uid信息 p.gids() 進程gid信息 p.cpu_affinity() get進程cpu親和度,如要設置進程cpu親和度,將cpu號作為參數即可 p.momory_info() 進程內存利用率 p.io_counters() 進程IO信息,包括讀寫IO數及字節數 p.connections() 返回打開進程socket的namedutples列表,包括fs,family,laddr等信息 p.num_threads() 進程開啟的線程數 from subprocess import PIPE p=psutil.Popen(["/usr/bin/python","-c","print('hello')",stdout=PIPE]) 通過psutil的Popen方法啟動的應用程序,可以跟蹤該程序運行的所有相關信息 p.name() 'python' p.username() 'root' p.coummunicate() ('hello\n',None) p.cpu_times() 得到進程運行cpu的時間 IPy IP地址處理模塊 IP('192.168.1').version() 返回IPv4類型 IP('::1').version() 返回IPv6類型 ip=IP('192.168.1.1') ip.reverseNames() 反向解析地址格式 ip.iptype() 192.168.1.1為 ip.int() 轉換成整數格式 ip.strHex() 轉換成十六進制 ip.strBin() 轉換成二進制 ip.netmask() 子網掩碼 ip.net() 輸出網絡地址 ip.broadcast() 輸出網絡廣播地址 print(IP(ox8080808)) 十六進制轉換成IP格式 IP與掩碼生產網段格式 print(IP('192.168.1.0').make_net('255.255.255.0')) print(IP('192.168.1.0/255.255.255.0',make_net=True)) print(IP('192.168.1.0-192.168.1.255',make_net=True)) IP('192.168.1.0/24').strNormal(*) wantprefixlen參數的定義.0:無返回如192.168.1.0;1:prefix格式如192.168.1.0、24;2:decimalnetmask格式如192.168.1.0、255.255.255.0;3:lastIP格式如192.168.1.0-192.168.1.255 多網絡計算方法 IP('10.0.0./24')<IP('12.0.0.0/24') True '192.168.1.100' in IP('192.168.1.0/24') True IP('192.168.1.0/24') in IP('192.168.0.0/16') Ture IP('192.168.0.0/23').overlaps('192.168.1.0/24') 返回1代表重,0代表不重疊