psutil
簡(jiǎn)介:psutil
是一個(gè)跨平臺(tái)(http://code.google.com/p/psutil)荞怒,能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率包括(保存CPU、內(nèi)存秧秉、磁盤褐桌、網(wǎng)絡(luò)等)信息。它實(shí)現(xiàn)了同等命令行工具提供的功能象迎,如ps
荧嵌、top
、 lsof
砾淌、 netstat
啦撮、 ifconfig
、 who
汪厨、 df
赃春、 kill
、 free
劫乱、nice
织中、 ionice
、 iostat
衷戈、iotop
狭吼、uptime
、 pidof
殖妇、 tty
刁笙、 taskset
、 pmap
安裝
yum install -y python-pip
功能函數(shù)
- CPU相關(guān)
- Memory內(nèi)存相關(guān)
- Disk相關(guān)
- Network相關(guān)
- 進(jìn)程管理
CPU
函數(shù) | 描述 |
---|---|
psutil.cpu_count() | cpu_count(,[logical]):默認(rèn)返回邏輯CPU的個(gè)數(shù),當(dāng)設(shè)置logical的參數(shù)為False時(shí)谦趣,返回物理CPU的個(gè)數(shù)疲吸。 |
psutil.cpu_percent() | cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu為True時(shí)顯示所有物理核心的利用率,interval不為0時(shí),則阻塞時(shí)顯示interval執(zhí)行的時(shí)間內(nèi)的平均利用率 |
psutil.cpu_times() | cpu_times(,[percpu]):以命名元組(namedtuple)的形式返回cpu的時(shí)間花費(fèi),percpu=True表示獲取每個(gè)CPU的時(shí)間花費(fèi) |
psutil.cpu_times_percent() | cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道前鹅,該函數(shù)返回的是耗時(shí)比例磅氨。 |
psutil.cpu_stats() | cpu_stats()以命名元組的形式返回CPU的統(tǒng)計(jì)信息,包括上下文切換嫡纠,中斷烦租,軟中斷和系統(tǒng)調(diào)用次數(shù)延赌。 |
psutil.cpu_freq() | cpu_freq([percpu]):返回cpu頻率 |
示例
import psutil
# 查看cpu個(gè)數(shù)
psutil.cpu_count() # 2
psutil.cpu_count(logical=True) # 2
psutil.cpu_count(logical=False) # 2
# 查看cpu利用率
psutil.cpu_percent() # 0.8
psutil.cpu_percent(percpu=True) # [0.8, 0.7]
# 查看cpu時(shí)間花費(fèi)
psutil.cpu_times() # scputimes(user=96.72, nice=0.09, system=97.48, idle=45351.82, iowait=8.11, irq=0.0, softirq=5.15, steal=0.0, guest=0.0, guest_nice=0.0)
psutil.cpu_times(percpu=True)
# [scputimes(user=45.88, nice=0.07, system=50.23, idle=22705.37, iowait=0.48, irq=0.0, softirq=1.89, steal=0.0, guest=0.0, guest_nice=0.0),scputimes(user=50.93, nice=0.01, system=47.35, idle=22670.42, iowait=7.62, irq=0.0, softirq=3.26, steal=0.0, guest=0.0, guest_nice=0.0)]
cpu_time = psutil.cpu_times()
cpu_time.user # 97.99 根據(jù)cpu_time獲取響應(yīng)的值
Memory
virtual_memory():以命名元組的形式返回內(nèi)存使用情況,包括總內(nèi)存叉橱,可用內(nèi)存挫以,內(nèi)存利用率,buffer和cache等窃祝。單位為字節(jié)掐松。
psutil.virtual_memory() # svmem(total=4125122560L, available=3663482880L, percent=11.2, used=1014362112L, free=3110760448L, active=458932224, inactive=325615616, buffers=2125824L, cached=550596608)
swap_memory():以命名元組的形式返回swap/memory使用情況,包含swap中頁的換入和換出粪小。
psutil.swap_memory() # sswap(total=1073737728L, used=0L, free=1073737728L, percent=0.0, sin=0, sout=0)
單位轉(zhuǎn)換
import psutil
def bytes2human(n):
symbols = ('K','M','G','T','P','E','Z','Y')
prefix = {}
for i,s in enumerate(symbols):
prefix[s] = 1 << (i + 1) * 10
for s in reversed(symbols):
if n >= prefix[s]:
value = float(n) / prefix[s]
return '%.1f%s' % (value,s)
return '%sB' % n
print bytes2human(psutil.virtual_memory().total)
Disk
函數(shù) | 描述 |
---|---|
psutil.disk_io_counters() | disk_io_counters([perdisk]):以命名元組的形式返回磁盤io統(tǒng)計(jì)信息(匯總的)大磺,包括讀、寫的次數(shù)探膊,讀杠愧、寫的字節(jié)數(shù)等。 當(dāng)perdisk的值為True逞壁,則分別列出單個(gè)磁盤的統(tǒng)計(jì)信息(字典:key為磁盤名稱流济,value為統(tǒng)計(jì)的namedtuple)。 |
psutil.disk_partitions() | disk_partitions([all=False]):以命名元組的形式返回所有已掛載的磁盤腌闯,包含磁盤名稱绳瘟,掛載點(diǎn),文件系統(tǒng)類型等信息姿骏。 當(dāng)all等于True時(shí)糖声,返回包含/proc等特殊文件系統(tǒng)的掛載信息 |
psutil.disk_usage() | disk_usage(path):以命名元組的形式返回path所在磁盤的使用情況,包括磁盤的容量分瘦、已經(jīng)使用的磁盤容量姨丈、磁盤的空間利用率等。 |
示例
# 查看所有已掛在的磁盤
psutil.disk_partitions() #[sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'),sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 使用列表表達(dá)式查詢指定掛載點(diǎn)信息
[device for device in psutil.disk_partitions() if device.mountpoint == '/']
# [sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 查看磁盤使用情況
psutil.disk_usage('/') #sdiskusage(total=20179845120, used=2114883584, free=18064961536, percent=10.5)
# 查看磁盤io統(tǒng)計(jì)匯總
psutil.disk_io_counters() #sdiskio(read_count=5964, write_count=35722, read_bytes=249860608, write_bytes=629057536, read_time=3929, write_time=108205)
# 分別列出單個(gè)磁盤的統(tǒng)計(jì)信息
psutil.disk_io_counters(perdisk=True)
# 輸出結(jié)果
{'sda1': sdiskio(read_count=508, write_count=519, read_bytes=5687808, write_bytes=2117632, read_time=88, write_time=69),
'sda2': sdiskio(read_count=52, write_count=0, read_bytes=2265088, write_bytes=0, read_time=19, write_time=0),
'sda3': sdiskio(read_count=5404, write_count=35240, read_bytes=241907712, write_bytes=627201024, read_time=3822, write_time=108206),
'sr0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0)}
Network
函數(shù) | 詳情 |
---|---|
psutil.net_io_counter([pernic]) | 以命名元組的形式返回當(dāng)前系統(tǒng)中每塊網(wǎng)卡的網(wǎng)絡(luò)io統(tǒng)計(jì)信息擅腰,包括收發(fā)字節(jié)數(shù),收發(fā)包的數(shù)量翁潘、出錯(cuò)的情況和刪包情況趁冈。當(dāng)pernic為True時(shí),則列出所有網(wǎng)卡的統(tǒng)計(jì)信息拜马。 |
psutil.net_connections([kind]) | 以列表的形式返回每個(gè)網(wǎng)絡(luò)連接的詳細(xì)信息(namedtuple)渗勘。命名元組包含fd, family, type, laddr, raddr, status, pid等信息。kind表示過濾的連接類型俩莽,支持的值如下:(默認(rèn)為inet) |
psutil.net_if_addrs() | 以字典的形式返回網(wǎng)卡的配置信息旺坠,包括IP地址和mac地址、子網(wǎng)掩碼和廣播地址扮超。 |
psutil.net_if_stats() | 返回網(wǎng)卡的詳細(xì)信息取刃,包括是否啟動(dòng)蹋肮、通信類型、傳輸速度與mtu璧疗。 |
psutil.users() | 以命名元組的方式返回當(dāng)前登陸用戶的信息坯辩,包括用戶名,登陸時(shí)間崩侠,終端漆魔,與主機(jī)信息 |
psutil.boot_time() | 以時(shí)間戳的形式返回系統(tǒng)的啟動(dòng)時(shí)間 |
示例
# 查看網(wǎng)卡信息統(tǒng)計(jì)
psutil.net_io_counters() # snetio(bytes_sent=2436593, bytes_recv=86547298, packets_sent=29381, packets_recv=66642, errin=0, errout=0, dropin=0, dropout=0)
# 查看網(wǎng)卡配置信息
psutil.net_if_addrs()
a = psutil.net_if_addrs()
a['eth0']
# 查看當(dāng)前登錄用戶信息
psutil.users() # [suser(name='root', terminal='tty1', host='', started=1591149568.0),
suser(name='root', terminal='pts/0', host='192.168.8.1', started=1591149568.0),
suser(name='root', terminal='pts/1', host='192.168.8.1', started=1591149824.0)]
進(jìn)程管理
函數(shù) | 詳情 |
---|---|
psutil.pids() | 以列表的形式返回當(dāng)前正在運(yùn)行的進(jìn)程 |
psutil.pid_exists(1) | 判斷給點(diǎn)定的pid是否存在 |
psutil.process_iter() | 迭代當(dāng)前正在運(yùn)行的進(jìn)程,返回的是每個(gè)進(jìn)程的Process對(duì)象 |
psutil.Process() | 對(duì)進(jìn)程進(jìn)行封裝却音,可以使用該類的方法獲取進(jìn)行的詳細(xì)信息改抡,或者給進(jìn)程發(fā)送信號(hào) |
進(jìn)程相關(guān)信息的方法:
- name:獲取進(jìn)程的名稱
- cmdline:獲取啟動(dòng)進(jìn)程的命令行參數(shù)
- create_time:獲取進(jìn)程的創(chuàng)建時(shí)間(時(shí)間戳格式)
- num_fds:進(jìn)程打開的文件個(gè)數(shù)
- num_threads:進(jìn)程的子進(jìn)程個(gè)數(shù)
- is_running:判斷進(jìn)程是否正在運(yùn)行
- send_signal:給進(jìn)程發(fā)送信號(hào),類似與os.kill等
- kill:發(fā)送SIGKILL信號(hào)結(jié)束進(jìn)程
- terminate:發(fā)送SIGTEAM信號(hào)結(jié)束進(jìn)程
示例
# 以列表形式查看正在運(yùn)行的進(jìn)程
psutil.pids() # [1,2,3,5,7,8,9,10,11,12,13,14,...
# 查看進(jìn)程運(yùn)行狀態(tài)系瓢,以布爾形式顯示
psutil.pid_exists(1) # True
# 迭代當(dāng)前正在運(yùn)行進(jìn)程阿纤,查看列表中前三個(gè)實(shí)例的信息
list(psutil.process_iter())[:3] # [<psutil.Process(pid=1, name='systemd') at 139918970276112>,<psutil.Process(pid=2, name='kthreadd') at 139918970317904>,<psutil.Process(pid=3, name='ksoftirqd/0') at 139918970214416>]
# 通過進(jìn)程號(hào)實(shí)例化對(duì)象
process = psutil.Process(1) # <psutil.Process(pid=1, name='systemd') at 139918970212944>
# 獲取進(jìn)程的名稱
process.name() # 'systemd'
process.create_time() # 1591149592.13
process.num_fds() # 41
process.num_threads() # 1