python之系統性能信息模塊psutil


系統性能信息模塊psutil

  • 跨平台庫
  • 輕松實現獲取系統運行的進程和系統利用率(包括CPU、內存、磁盤、網絡等)信息。
  • 主要用於系統監控,分析和限制系統資源及進程的管理
  • 實現同等命令行工具提供的功能(ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice, iostat、iotop、uptime、pidof、tty、taskset、pmap)等

源碼安裝步驟

# 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

備注:在執行最后一步安裝時可能出現如下報錯

.....
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
.....

我上網查了一下,先安裝下面這個包就ok了

sudo apt-get install python-dev

獲取系統性能信息

采集系統的基本性能信息包括CPU、內存、磁盤、網絡等,可以完整描述當前系統的運行狀態和質量。

獲取CPU信息

Linux操作系統的CPU利用率有以下幾部分:

  • User Time:執行用戶進程的時間百分比
  • System Time:執行內核進程和中斷的時間百分比
  • Wait IO:由於IO等待使CPU處於idle(空閑)狀態的時間百分比
  • Idle:CPU處於idle狀態的時間百分比

使用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()

>>> 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')

>>> psutil.disk_usage('/')
sdiskusage(total=975513235456, used=26903121920, free=899033231360, percent=2.8)

3.磁盤IO信息:psutil.disk_io_counters()

  • read_count(讀IO數)
  • write_count(寫IO數)
  • read_bytes(IO讀字節數)
  • write_bytes(IO寫字節數)
  • read_time(磁盤讀時間)
  • write_time(磁盤寫時間)
>>> 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()),涉及以下幾個關鍵點:

  • bytes_sent(發送字節數)
  • bytes_recv(接收字節數)
  • packets_sent(發送數據包數)
  • packets_recv(接收數據包數)等
>>> 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

popen類的使用

>>> p=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE)
>>> p.name()
'python'
>>> p.username()
'root'
>>> p.communicate()
('hello\n', None)

學習書本:《Python自動化運維技術與最佳實踐》--劉天斯
本文為原創,若轉載,請注明出處,謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM