# wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificate # tar -xzvf psutil-2.0.0.tar.gz # cd psutil-2.0.0.tar.gz # python setup.py install
備註:在執行最後一步安裝時可能出現以下報錯python
..... error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 .....
我上網查了一下,先安裝下面這個包就ok了linux
sudo apt-get install python-dev
採集系統的基本性能信息包括CPU、內存、磁盤、網絡等,能夠完整描述當前系統的運行狀態和質量。ios
Linux操做系統的CPU利用率有如下幾部分:docker
使用psutil.cpu_times()方法能夠很是簡單的獲得這些信息,同時也可獲取CPU的硬件相關信息,好比CPU的物理個數和邏輯個數緩存
>>> import psutil >>> psutil.cpu_times() #獲取CPU完整信息,若須要顯示全部邏輯CPU信息,指定方法變量percpu=True便可,如psutil.cpu_times(percpu=True) scputimes(user=23434.91, nice=113.03, system=9915.3, idle=3431610.53, iowait=2935.88, irq=0.0, softirq=104.9, steal=0.0, guest=0.0, guest_nice=0.0) >>> psutil.cpu_times().user 23437.62 >>> psutil.cpu_count() 8 >>> psutil.cpu_count(logical=False) 1
Linux系統的內存利用率信息涉及total(內存總數)、used(已使用的內存數)、free(空閒內存數)、buffers(緩衝使用數)、cache(緩存使用數)、swap(交換分區使用數)等網絡
具體使用以下:運維
>>> psutil.virtual_memory() svmem(total=8246726656L, available=5614632960L, percent=31.9,used=5847158784L, free=2399567872L, active=3703824384, inactive=1726611456, buffers=276090880L, cached=2938974208) >>> mem=psutil.virtual_memory() >>> mem svmem(total=8246726656L, available=5613244416L, percent=31.9, used=5848616960L, free=2398109696L, active=3704242176, inactive=1726664704, buffers=276090880L, cached=2939043840) >>> mem.percent 31.9 >>> mem.free 2398109696L >>> swap=psutil.virtual_memory() >>> swap svmem(total=8246726656L, available=5645967360L, percent=31.5, used=5819650048L, free=2427076608L, active=3671724032, inactive=1730355200, buffers=276090880L, cached=2942799872)
1.磁盤完整信息:psutil.disk_partitions()socket
>>> psutil.disk_partitions() [sdiskpart(device='/dev/sda2', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sda1', mountpoint='/boot/efi', fstype='vfat', opts='rw')]
2.磁盤利用率:psutil.disk_usage('磁盤name')ionic
>>> psutil.disk_usage('/') sdiskusage(total=975513235456, used=26903121920, free=899033231360, percent=2.8)
3.磁盤IO信息:psutil.disk_io_counters()工具
>>> psutil.disk_io_counters() #獲取磁盤IO個數、讀寫信息 sdiskio(read_count=52288, write_count=829577, read_bytes=1680531456, write_bytes=31535281152, read_time=704980, write_time=7189056) >>> psutil.disk_io_counters().write_count 829611 >>> psutil.disk_io_counters(perdisk=True) #此參數獲取單個分區IO個數、讀寫信息 省略
系統的網絡信息與磁盤IO相似(psutil.net_io_counters()),涉及如下幾個關鍵點:
>>> psutil.net_io_counters() snetio(bytes_sent=242647738, bytes_recv=591544314, packets_sent=1455844, packets_recv=1779176, errin=0, errout=0, dropin=0, dropout=0) >>> psutil.net_io_counters(pernic=True) {'lo': snetio(bytes_sent=17429720, bytes_recv=17429720, packets_sent=217121, packets_recv=217121, errin=0, errout=0, dropin=0, dropout=0), 'docker0': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=225221972, bytes_recv=574119442, packets_sent=1238756, packets_recv=1562090, errin=0, errout=0, dropin=0, dropout=0)}
psutil模塊還支持獲取用戶登陸、開機時間等信息,操做以下:
>>> psutil.users() [suser(name='ruanyang', terminal=':0', host=':0', started=1473233792.0), suser(name='ruanyang', terminal='pts/14', host=':0', started=1473237248.0)] >>> psutil.boot_time() 1473233706.0 >>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") '2016-09-07 15:35:06'
功能:獲取進程信息,得知應用程序的運行狀態,包括進程的啓動時間、查看或設置CPU親和度、內存使用率、IO信息、socket鏈接、線程數等
做用:這些信息可呈現出指定進程是否存活、資源利用狀況,爲開發人員的代碼優化、問題定位提供更好的數據參考
psutil.pids():獲取全部進程的PID
psutil.Process():獲取單個進程的名稱、路徑、狀態、系統資源利用率等信息
>>> psutil.pids() #列出全部進程的Pid [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28] >>> p=psutil.Process(1) #實例化一個Process對象,參數爲一進程的PID >>> p.name() #進程名 'init' >>> p.exe() #進程bin路徑 '/sbin/init' >>> p.cwd() #進程工做目錄絕對路徑 '/' >>> p.status() #進程狀態 'sleeping' >>> p.create_time() #進程建立時間,時間戳格式 1473233706.04 >>> p.uids() #進程uid信息 puids(real=0, effective=0, saved=0) >>> p.gids() #進程gid信息 pgids(real=0, effective=0, saved=0) >>> p.cpu_times() #進程CPU時間信息,包括user、system兩個CPU時間 pcputimes(user=0.6, system=0.74) >>> p.cpu_affinity() #get進程CPU親和度,若要設置進程CPU親和度,將CPU號做爲參數便可 [0, 1, 2, 3, 4, 5, 6, 7] >>> p.memory_percent() #進程內存利用率 0.05473434719357334 >>> p.memory_info() #進程內存rss、vms信息 pmem(rss=4513792, vms=34713600) >>> p.io_counters() #進程IO信息,包括讀寫IO數及字節數 pio(read_count=2174812, write_count=973346, read_bytes=754508288, write_bytes=2169106432) >>> p.connections() #返回打開進程socket的namedutples列表,包括fs、family、laddr等信息 [] >>> p.num_threads() #進程開啓的線程數 1
>>> p=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE) >>> p.name() 'python' >>> p.username() 'root' >>> p.communicate() ('hello\n', None)
學習書本:《Python自動化運維技術與最佳實踐》--劉天斯 本文爲原創,若轉載,請註明出處,謝謝