python psutil監控系統資源【轉】

經過 運用 Python 第三方 系統 基礎 模塊, 能夠 輕鬆 獲取 服務 關鍵 運營 指標 數據,包括 Linux 基本 性能、 塊 設備、 網卡 接口、 系統 信息、 網絡 地址 庫 等 信息。 在 採集 到這 些 數據 後, 咱們 就能夠全方位 瞭解 系統 服務 的 狀態,再結合 告警 機制, 能夠 在 第一 時間 響應, 將 異常 出現 在 苗頭 時 就得 以 處理。css

1 查看是否安裝pythonhtml

Last login: Thu Oct 22 09:28:13 2015 from 192.168.102.252
-bash-3.2$ python
Python 2.4.3 (#1, Jun 11 2009, 14:09:37) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> copyright
Copyright (c) 2001-2006 Python Software Foundation.
All Rights Reserved.python

 

2 安裝psutil  模塊linux

    psutil 是 一個 跨 平臺 庫( http:// code. google. com/ p/ psutil/), 可以 輕鬆 實現 獲取 系統 運行 的 進程 和 系統 利用率( 包括 CPU、 內存、 磁盤、 網絡 等) 信息。ios

它 實現 了 同等 命令行 工具 提供 的 功能, 如 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. 4 到 3. 4 的 Python 版本。請選擇適合本身的版本web

下載地址  https://pypi.python.org/pypi/psutil/
chrome

 

如下是安裝步驟 (附錄二有各操做系統平臺的安裝方法shell

[root@localhost oracle]# cd /peter/express

[root@localhost peter]# ls
jdk-6u22-linux-i586-rpm.bin  mnt  netlog  netlog.1124  psutil-2.0.0.tar.gz  rkhunter-1.4.2  rkhunter-1.4.2.tar.gz
[root@localhost peter]# ll
total 688
-rwxrwxrwx 1 root root 163840 Jan 20  2014 jdk-6u22-linux-i586-rpm.bin
drwxr-xr-x 2 root root   4096 Nov 11  2014 mnt
-rw-r--r-- 1 root root  13369 Nov  4  2014 netlog
-rw-r--r-- 1 root root  14568 Nov 24  2014 netlog.1124
-rwxrwxrwx 1 root root 207168 Nov 26  2015 psutil-2.0.0.tar.gz
drwxr-xr-x 3 root root   4096 Mar 13  2014 rkhunter-1.4.2bootstrap

-rwxrwxrwx 1 root root 277707 Apr  1  2015 rkhunter-1.4.2.tar.gz

[root@localhost peter]# tar -zxvf psutil-2.0.0.tar.gz            ####此處解壓
psutil-2.0.0/
psutil-2.0.0/README
psutil-2.0.0/PKG-INFO
psutil-2.0.0/MANIFEST.in
psutil-2.0.0/HISTORY
psutil-2.0.0/TODO
psutil-2.0.0/make.bat
psutil-2.0.0/examples/
psutil-2.0.0/examples/meminfo.py
psutil-2.0.0/examples/disk_usage.py
psutil-2.0.0/examples/iotop.py
psutil-2.0.0/examples/killall.py
psutil-2.0.0/examples/free.py
psutil-2.0.0/examples/pmap.py
psutil-2.0.0/examples/netstat.py
psutil-2.0.0/examples/who.py
psutil-2.0.0/examples/nettop.py
psutil-2.0.0/examples/top.py
psutil-2.0.0/examples/process_detail.py
psutil-2.0.0/test/
psutil-2.0.0/test/__init__.py
psutil-2.0.0/test/README
psutil-2.0.0/test/test_psutil.py
psutil-2.0.0/test/_osx.py
psutil-2.0.0/test/_bsd.py
psutil-2.0.0/test/_posix.py
psutil-2.0.0/test/_linux.py
psutil-2.0.0/test/_sunos.py
psutil-2.0.0/test/test_memory_leaks.py
psutil-2.0.0/test/_windows.py
psutil-2.0.0/Makefile
psutil-2.0.0/docs/
psutil-2.0.0/docs/README
psutil-2.0.0/docs/_themes/
psutil-2.0.0/docs/_themes/pydoctheme/
psutil-2.0.0/docs/_themes/pydoctheme/static/
psutil-2.0.0/docs/_themes/pydoctheme/static/pydoctheme.css
psutil-2.0.0/docs/_themes/pydoctheme/theme.conf
psutil-2.0.0/docs/_template/
psutil-2.0.0/docs/_template/indexsidebar.html
psutil-2.0.0/docs/_template/indexcontent.html
psutil-2.0.0/docs/_template/page.html
psutil-2.0.0/docs/_template/globaltoc.html
psutil-2.0.0/docs/make.bat
psutil-2.0.0/docs/Makefile
psutil-2.0.0/docs/index.rst
psutil-2.0.0/docs/_static/
psutil-2.0.0/docs/_static/copybutton.js
psutil-2.0.0/docs/_static/logo.png
psutil-2.0.0/docs/_static/sidebar.js
psutil-2.0.0/docs/conf.py
psutil-2.0.0/psutil.egg-info/
psutil-2.0.0/psutil.egg-info/PKG-INFO
psutil-2.0.0/psutil.egg-info/SOURCES.txt
psutil-2.0.0/psutil.egg-info/top_level.txt
psutil-2.0.0/psutil.egg-info/dependency_links.txt
psutil-2.0.0/LICENSE
psutil-2.0.0/setup.py
psutil-2.0.0/CREDITS
psutil-2.0.0/setup.cfg
psutil-2.0.0/psutil/
psutil-2.0.0/psutil/__init__.py
psutil-2.0.0/psutil/_psutil_bsd.c
psutil-2.0.0/psutil/_psutil_posix.c
psutil-2.0.0/psutil/_psutil_common.c
psutil-2.0.0/psutil/_psutil_osx.c
psutil-2.0.0/psutil/_compat.py
psutil-2.0.0/psutil/_common.py
psutil-2.0.0/psutil/_psutil_linux.c
psutil-2.0.0/psutil/_psutil_osx.h
psutil-2.0.0/psutil/_psutil_bsd.h
psutil-2.0.0/psutil/_psosx.py
psutil-2.0.0/psutil/_pssunos.py
psutil-2.0.0/psutil/_psutil_windows.h
psutil-2.0.0/psutil/_psutil_windows.c
psutil-2.0.0/psutil/_psutil_common.h
psutil-2.0.0/psutil/_psutil_sunos.c
psutil-2.0.0/psutil/_psbsd.py
psutil-2.0.0/psutil/_psutil_linux.h
psutil-2.0.0/psutil/arch/
psutil-2.0.0/psutil/arch/osx/
psutil-2.0.0/psutil/arch/osx/process_info.h
psutil-2.0.0/psutil/arch/osx/process_info.c
psutil-2.0.0/psutil/arch/windows/
psutil-2.0.0/psutil/arch/windows/ntextapi.h
psutil-2.0.0/psutil/arch/windows/security.c
psutil-2.0.0/psutil/arch/windows/process_info.h
psutil-2.0.0/psutil/arch/windows/process_info.c
psutil-2.0.0/psutil/arch/windows/process_handles.c
psutil-2.0.0/psutil/arch/windows/glpi.h
psutil-2.0.0/psutil/arch/windows/security.h
psutil-2.0.0/psutil/arch/windows/process_handles.h
psutil-2.0.0/psutil/arch/bsd/
psutil-2.0.0/psutil/arch/bsd/process_info.h
psutil-2.0.0/psutil/arch/bsd/process_info.c
psutil-2.0.0/psutil/_psposix.py
psutil-2.0.0/psutil/_psutil_sunos.h
psutil-2.0.0/psutil/_psutil_posix.h
psutil-2.0.0/psutil/_pslinux.py
psutil-2.0.0/psutil/_pswindows.py
[root@localhost peter]# ll
total 692
-rwxrwxrwx 1 root root 163840 Jan 20  2014 jdk-6u22-linux-i586-rpm.bin
drwxr-xr-x 2 root root   4096 Nov 11  2014 mnt
-rw-r--r-- 1 root root  13369 Nov  4  2014 netlog
-rw-r--r-- 1 root root  14568 Nov 24  2014 netlog.1124
drwxr-xr-x 7 1000 1000   4096 Mar 10  2014 psutil-2.0.0
-rwxrwxrwx 1 root root 207168 Nov 26  2015 psutil-2.0.0.tar.gz
drwxr-xr-x 3 root root   4096 Mar 13  2014 rkhunter-1.4.2
-rwxrwxrwx 1 root root 277707 Apr  1  2015 rkhunter-1.4.2.tar.gz


[root@localhost peter]# 
[root@localhost peter]# cd psutil-2.0.0
[root@localhost psutil-2.0.0]# python setup.py install        ###安裝
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.4
creating build/lib.linux-x86_64-2.4/psutil
copying psutil/_psosx.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pssunos.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/__init__.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pslinux.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_psbsd.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_compat.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pswindows.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_psposix.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_common.py -> build/lib.linux-x86_64-2.4/psutil
running build_ext
building '_psutil_linux' extension
creating build/temp.linux-x86_64-2.4
creating build/temp.linux-x86_64-2.4/psutil
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.4/psutil/_psutil_linux.o
psutil/_psutil_linux.c: In function 'psutil_proc_cpu_affinity_set':
psutil/_psutil_linux.c:327: warning: suggest explicit braces to avoid ambiguous 'else'
gcc -pthread -shared build/temp.linux-x86_64-2.4/psutil/_psutil_linux.o -o build/lib.linux-x86_64-2.4/_psutil_linux.so
building '_psutil_posix' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c psutil/_psutil_posix.c -o build/temp.linux-x86_64-2.4/psutil/_psutil_posix.o
gcc -pthread -shared build/temp.linux-x86_64-2.4/psutil/_psutil_posix.o -o build/lib.linux-x86_64-2.4/_psutil_posix.so
running install_lib
copying build/lib.linux-x86_64-2.4/_psutil_posix.so -> /usr/lib64/python2.4/site-packages
copying build/lib.linux-x86_64-2.4/_psutil_linux.so -> /usr/lib64/python2.4/site-packages
creating /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psosx.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pssunos.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/__init__.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pslinux.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psbsd.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_compat.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pswindows.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psposix.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_common.py -> /usr/lib64/python2.4/site-packages/psutil
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psosx.py to _psosx.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pssunos.py to _pssunos.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/__init__.py to __init__.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pslinux.py to _pslinux.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psbsd.py to _psbsd.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_compat.py to _compat.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pswindows.py to _pswindows.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psposix.py to _psposix.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_common.py to _common.pyc
[root@localhost psutil-2.0.0]# 






3 進入python 試一下 psutil 模塊是否安裝正確
#python






You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)".  Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
>>> import psutil                                                                                                   
>>> psutil.cpu_times()
scputimes(user=7924.96, nice=212.0, system=1933.8, idle=12099434.460000001, iowait=3665.8400000000001, irq=83.379999999999995, softirq=491.57999999999998, steal=0.0)

 >>> psutil.swap_memory()
sswap(total=8439095296L, used=921686016L, free=7517409280L, percent=10.9, sin=2560000, sout=636985344)
>>> psutil.swap_memory().free
7517409280L
>>> 

調用函數: 函數名.參數

後面附函數&參數列表

 

4  經過一個案例見證如下psutil 的功能

如下經過shell &python實現一個服務器信息的簡單監控,執行我作好的腳步

[root@localhost peter]# ./peter.sh 
 開機時間:2015-10-22 09:22:39
 當前CPU使用率:1.9%
 物理內存:7950M        使用率:10.6%
Swap內存:8024M 使用率:10.9%
 發送:12653809 Byte    發送包數:122654個
 接收:5585369078 Byte  接收包數:46197965個
 盤符: /dev/sda3 掛載點: / 使用率: 29.6%
 盤符: /dev/sda5 掛載點: /oracle 使用率: 29.6%
 盤符: /dev/sda2 掛載點: /oracle/oradata 使用率: 42.8%
 盤符: /dev/sda1 掛載點: /boot 使用率: 11.8%
 盤符: /dev/sdb1 掛載點: /oracle/oradata2 使用率: 53.3%
[root@localhost peter]# 

 

下面看一下peter.sh的內容內容,你們直接粘過去就能用。有興趣的朋友能夠本身再優化一下

 

#!/usr/bin/env python
#coding:utf-8
import psutil
import time
import sys
from optparse import OptionParser
parser = OptionParser()  
parser.add_option("-t", "--time", dest="time",
                  help="此參數可查看當前下載佔的帶寬,-t是測試時間", metavar="10")  
parser.add_option("-d", "--deamon",action="store_false", dest="deamon", default=True,  
                  help="後臺運行此腳本") 
 
def Sysinfo():
    Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time()))  
    time.sleep(0.5)
    Cpu_usage = psutil.cpu_percent()
    RAM = int(psutil.virtual_memory().total/(1027*1024))
    RAM_percent = psutil.virtual_memory().percent
    Swap = int(psutil.swap_memory().total/(1027*1024))
    Swap_percent = psutil.swap_memory().percent
    Net_sent = psutil.net_io_counters().bytes_sent
    Net_recv = psutil.net_io_counters().bytes_recv
    Net_spkg = psutil.net_io_counters().packets_sent
    Net_rpkg = psutil.net_io_counters().packets_recv
    BFH = r'%'
    print " \033[1;32m開機時間:%s\033[1;m"  % Boot_Start
    print " \033[1;32m當前CPU使用率:%s%s\033[1;m" % (Cpu_usage,BFH)
    print " \033[1;32m物理內存:%dM\t使用率:%s%s\033[1;m" % (RAM,RAM_percent,BFH)
    print "\033[1;32mSwap內存:%dM\t使用率:%s%s\033[1;m" % (Swap,Swap_percent,BFH)
    print " \033[1;32m發送:%d Byte\t發送包數:%d個\033[1;m" % (Net_sent,Net_spkg)
    print " \033[1;32m接收:%d Byte\t接收包數:%d個\033[1;m" % (Net_recv,Net_rpkg)
 
    for i in psutil.disk_partitions():
        print " \033[1;32m盤符: %s 掛載點: %s 使用率: %s%s\033[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)
 
 
def Net_io(s):
    x = 0
    sum = 0
    while True:
        if x >= s:
            break
        r1 = psutil.net_io_counters().bytes_recv
        time.sleep(1)
        r2 = psutil.net_io_counters().bytes_recv
        y = r2 - r1
        print "%.2f Kb/s" % (y / 1024.0)
        sum += y
        x += 1
    result = sum / x
    print "\033[1;32m%s秒內平均速度:%.2f Kb/s \033[1;m"  % (x,result / 1024.0)
if __name__ == "__main__":
    (options, args) = parser.parse_args()  
    if options.time:
        Net_io(int(options.time))
    else:
        Sysinfo()

######腳本至此結束

 

附錄1  psutil 模塊的其它用法:

Example usages

CPU

>>> import psutil >>> psutil.cpu_times() scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0) >>> >>> for x in range(3): ... psutil.cpu_percent(interval=1) ... 4.0 5.9 3.8 >>> >>> for x in range(3): ... psutil.cpu_percent(interval=1, percpu=True) ... [4.0, 6.9, 3.7, 9.2] [7.0, 8.5, 2.4, 2.1] [1.2, 9.0, 9.9, 7.2] >>> >>> >>> for x in range(3): ... psutil.cpu_times_percent(interval=1, percpu=False) ... scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0) >>> >>> psutil.cpu_count() 4 >>> psutil.cpu_count(logical=False) 2 >>> 

Memory

>>> psutil.virtual_memory() svmem(total=8374149120, available=2081050624, percent=75.1, used=8074080256, free=300068864, active=3294920704, inactive=1361616896, buffers=529895424, cached=1251086336) >>> psutil.swap_memory() sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944) >>> 

Disks

>>> psutil.disk_partitions() [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'), sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw')] >>> >>> psutil.disk_usage('/') sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5) >>> >>> psutil.disk_io_counters(perdisk=False) sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568) >>> 

Network

>>> psutil.net_io_counters(pernic=True) {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0), 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)} >>> >>> psutil.net_connections() [pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED', pid=1254), pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING', pid=2987), pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED', pid=None), pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT', pid=None) ...] >>> >>> psutil.net_if_addrs() {'lo': [snic(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None), snic(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snic(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)], 'wlan0': [snic(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None), snic(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snic(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]} >>> >>> psutil.net_if_stats() {'eth0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500), 'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)} 

Other system info

>>> psutil.users() [user(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0), user(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0)] >>> >>> psutil.boot_time() 1365519115.0 >>> 

Process management

>>> import psutil >>> psutil.pids() [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071] >>> >>> p = psutil.Process(7055) >>> p.name() 'python' >>> p.exe() '/usr/bin/python' >>> p.cwd() '/home/giampaolo' >>> p.cmdline() ['/usr/bin/python', 'main.py'] >>> >>> p.status() 'running' >>> p.username() 'giampaolo' >>> p.create_time() 1267551141.5019531 >>> p.terminal() '/dev/pts/0' >>> >>> p.uids() puids(real=1000, effective=1000, saved=1000) >>> p.gids() pgids(real=1000, effective=1000, saved=1000) >>> >>> p.cpu_times() pcputimes(user=1.02, system=0.31) >>> p.cpu_percent(interval=1.0) 12.1 >>> p.cpu_affinity() [0, 1, 2, 3] >>> p.cpu_affinity([0]) # set >>> >>> p.memory_percent() 0.63423 >>> >>> p.memory_info() pmem(rss=7471104, vms=68513792) >>> p.memory_info_ex() extmem(rss=9662464, vms=49192960, shared=3612672, text=2564096, lib=0, data=5754880, dirty=0) >>> p.memory_maps() [pmmap_grouped(path='/lib/x86_64-linux-gnu/libutil-2.15.so', rss=16384, anonymous=8192, swap=0), pmmap_grouped(path='/lib/x86_64-linux-gnu/libc-2.15.so', rss=6384, anonymous=15, swap=0), pmmap_grouped(path='/lib/x86_64-linux-gnu/libcrypto.so.1.0.0', rss=34124, anonymous=1245, swap=0), pmmap_grouped(path='[heap]', rss=54653, anonymous=8192, swap=0), pmmap_grouped(path='[stack]', rss=1542, anonymous=166, swap=0), ...] >>> >>> p.io_counters() pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632) >>> >>> p.open_files() [popenfile(path='/home/giampaolo/svn/psutil/somefile', fd=3)] >>> >>> p.connections() [pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED'), pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING'), pconn(fd=119, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED'), pconn(fd=123, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT')] >>> >>> p.num_threads() 4 >>> p.num_fds() 8 >>> p.threads() [pthread(id=5234, user_time=22.5, system_time=9.2891), pthread(id=5235, user_time=0.0, system_time=0.0), pthread(id=5236, user_time=0.0, system_time=0.0), pthread(id=5237, user_time=0.0707, system_time=1.1)] >>> >>> p.num_ctx_switches() pctxsw(voluntary=78, involuntary=19) >>> >>> p.nice() 0 >>> p.nice(10) # set >>> >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only) >>> p.ionice() pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0) >>> >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only) >>> p.rlimit(psutil.RLIMIT_NOFILE) (5, 5) >>> >>> p.suspend() >>> p.resume() >>> >>> p.terminate() >>> p.wait(timeout=3) 0 >>> >>> psutil.test() USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND root 1 0.0 0.0 24584 2240 Jun17 00:00 init root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd root 3 0.0 0.0 0 0 Jun17 00:05 ksoftirqd/0 ... giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4 giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1 >>> 

Further process APIs

>>> for p in psutil.process_iter(): ... print(p) ... psutil.Process(pid=1, name='init') psutil.Process(pid=2, name='kthreadd') psutil.Process(pid=3, name='ksoftirqd/0') ... >>> >>> def on_terminate(proc): ... print("process {} terminated".format(proc)) ... >>> # waits for multiple processes to terminate >>> gone, alive = psutil.wait_procs(procs_list, 3, callback=on_terminate) >>>

 

附錄2  各平臺安裝方法

Installing using pip on UNIX

The easiest way to install psutil on UNIX is by using pip (but first you might need to install python header files; see later). First install pip:

$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py

...then run:

$ pip install psutil

You may need to install gcc and python header files first (see later).

Installing on Windows

Just get the right installer for your Python version and architecture from: https://pypi.python.org/pypi/psutil/#downloadsSince wheels installers are also available you may also use pip.

Compiling on Windows using Visual Studio

In order to compile psutil on Windows you'll need Visual Studio (Mingw32 is no longer supported). You must have the same version of Visual Studio used to compile your installation of Python, that is:

* Python 2.6:  VS 2008 (download it from `here <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_)
* Python 2.7:  VS 2008 (download it from `here <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_)
* Python 3.3, 3.4: VS 2010 (you can download it from `MS website <http://www.visualstudio.com/downloads/download-visual-studio-vs#d-2010-express>`_)
* Python 3.5: `VS 2015 UP <http://www.visualstudio.com/en-au/news/vs2015-preview-vs>`_

...then run:

setup.py build

...or:

make.bat build

Compiling 64 bit versions of Python 2.6 and 2.7 with VS 2008 requires Windows SDK and .NET Framework 3.5 SP1 to be installed first. Once you have those run vcvars64.bat, then compile: http://stackoverflow.com/questions/11072521/

Installing on Linux

gcc is required and so the python headers. They can easily be installed by using the distro package manager. For example, on Debian and Ubuntu:

$ sudo apt-get install gcc python-dev

...on Redhat and CentOS:

$ sudo yum install gcc python-devel

Once done, you can build/install psutil with:

$ python setup.py install

Installing on OS X

OS X installation from source will require gcc which you can obtain as part of the 'XcodeTools' installer from Apple. Then you can run the standard distutils commands. To build only:

$ python setup.py build

To install and build:

$ python setup.py install

Installing on FreeBSD

The same compiler used to install Python must be present on the system in order to build modules using distutils. Assuming it is installed, you can build using the standard distutils commands.

Build only:

$ python setup.py build

Install and build:

$ python setup.py install

Makefile

A makefile is available for both UNIX and Windows (make.bat). It provides some automations for the tasks described above and might be preferred over using setup.py. With it you can:

$ make install    # just install (in --user mode)
$ make uninstall  # uninstall (needs pip)
$ make test       # run tests
$ make clean      # remove installation files


經過 運用 Python 第三方 系統 基礎 模塊, 能夠 輕鬆 獲取 服務 關鍵 運營 指標 數據,包括 Linux 基本 性能、 塊 設備、 網卡 接口、 系統 信息、 網絡 地址 庫 等 信息。 在 採集 到這 些 數據 後, 咱們 就能夠全方位 瞭解 系統 服務 的 狀態,再結合 告警 機制, 能夠 在 第一 時間 響應, 將 異常 出現 在 苗頭 時 就得 以 處理。

1 查看是否安裝python

Last login: Thu Oct 22 09:28:13 2015 from 192.168.102.252
-bash-3.2$ python
Python 2.4.3 (#1, Jun 11 2009, 14:09:37) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> copyright
Copyright (c) 2001-2006 Python Software Foundation.
All Rights Reserved.


2 安裝psutil  模塊

    psutil 是 一個 跨 平臺 庫( http:// code. google. com/ p/ psutil/), 可以 輕鬆 實現 獲取 系統 運行 的 進程 和 系統 利用率( 包括 CPU、 內存、 磁盤、 網絡 等) 信息。

它 實現 了 同等 命令行 工具 提供 的 功能, 如 ps、 top、 lsof、 netstat、 ifconfigwhodfkillfreenice、 ionice、 iostat、 iotop、 uptimepidof、 tty、 taskset、pmap 等。目前 支持 32 位 和 64 位 的 Linux、 Windows、 OS X、 FreeBSD 和 Sun Solaris 等 操做系統, 支持 從 2. 43. 4 的 Python 版本。請選擇適合本身的版本

下載地址  https://pypi.python.org/pypi/psutil/


如下是安裝步驟 (附錄二有各操做系統平臺的安裝方法)

[root@localhost oracle]# cd /peter/
[root@localhost peter]# ls
jdk-6u22-linux-i586-rpm.bin  mnt  netlog  netlog.1124  psutil-2.0.0.tar.gz  rkhunter-1.4.2  rkhunter-1.4.2.tar.gz
[root@localhost peter]# ll
total 688
-rwxrwxrwx 1 root root 163840 Jan 20  2014 jdk-6u22-linux-i586-rpm.bin
drwxr-xr-x 2 root root   4096 Nov 11  2014 mnt
-rw-r--r-- 1 root root  13369 Nov  4  2014 netlog
-rw-r--r-- 1 root root  14568 Nov 24  2014 netlog.1124
-rwxrwxrwx 1 root root 207168 Nov 26  2015 psutil-2.0.0.tar.gz
drwxr-xr-x 3 root root   4096 Mar 13  2014 rkhunter-1.4.2

-rwxrwxrwx 1 root root 277707 Apr  1  2015 rkhunter-1.4.2.tar.gz
[root@localhost peter]# tar -zxvf psutil-2.0.0.tar.gz            ####此處解壓
psutil-2.0.0/
psutil-2.0.0/README
psutil-2.0.0/PKG-INFO
psutil-2.0.0/MANIFEST.in
psutil-2.0.0/HISTORY
psutil-2.0.0/TODO
psutil-2.0.0/make.bat
psutil-2.0.0/examples/
psutil-2.0.0/examples/meminfo.py
psutil-2.0.0/examples/disk_usage.py
psutil-2.0.0/examples/iotop.py
psutil-2.0.0/examples/killall.py
psutil-2.0.0/examples/free.py
psutil-2.0.0/examples/pmap.py
psutil-2.0.0/examples/netstat.py
psutil-2.0.0/examples/who.py
psutil-2.0.0/examples/nettop.py
psutil-2.0.0/examples/top.py
psutil-2.0.0/examples/process_detail.py
psutil-2.0.0/test/
psutil-2.0.0/test/__init__.py
psutil-2.0.0/test/README
psutil-2.0.0/test/test_psutil.py
psutil-2.0.0/test/_osx.py
psutil-2.0.0/test/_bsd.py
psutil-2.0.0/test/_posix.py
psutil-2.0.0/test/_linux.py
psutil-2.0.0/test/_sunos.py
psutil-2.0.0/test/test_memory_leaks.py
psutil-2.0.0/test/_windows.py
psutil-2.0.0/Makefile
psutil-2.0.0/docs/
psutil-2.0.0/docs/README
psutil-2.0.0/docs/_themes/
psutil-2.0.0/docs/_themes/pydoctheme/
psutil-2.0.0/docs/_themes/pydoctheme/static/
psutil-2.0.0/docs/_themes/pydoctheme/static/pydoctheme.css
psutil-2.0.0/docs/_themes/pydoctheme/theme.conf
psutil-2.0.0/docs/_template/
psutil-2.0.0/docs/_template/indexsidebar.html
psutil-2.0.0/docs/_template/indexcontent.html
psutil-2.0.0/docs/_template/page.html
psutil-2.0.0/docs/_template/globaltoc.html
psutil-2.0.0/docs/make.bat
psutil-2.0.0/docs/Makefile
psutil-2.0.0/docs/index.rst
psutil-2.0.0/docs/_static/
psutil-2.0.0/docs/_static/copybutton.js
psutil-2.0.0/docs/_static/logo.png
psutil-2.0.0/docs/_static/sidebar.js
psutil-2.0.0/docs/conf.py
psutil-2.0.0/psutil.egg-info/
psutil-2.0.0/psutil.egg-info/PKG-INFO
psutil-2.0.0/psutil.egg-info/SOURCES.txt
psutil-2.0.0/psutil.egg-info/top_level.txt
psutil-2.0.0/psutil.egg-info/dependency_links.txt
psutil-2.0.0/LICENSE
psutil-2.0.0/setup.py
psutil-2.0.0/CREDITS
psutil-2.0.0/setup.cfg
psutil-2.0.0/psutil/
psutil-2.0.0/psutil/__init__.py
psutil-2.0.0/psutil/_psutil_bsd.c
psutil-2.0.0/psutil/_psutil_posix.c
psutil-2.0.0/psutil/_psutil_common.c
psutil-2.0.0/psutil/_psutil_osx.c
psutil-2.0.0/psutil/_compat.py
psutil-2.0.0/psutil/_common.py
psutil-2.0.0/psutil/_psutil_linux.c
psutil-2.0.0/psutil/_psutil_osx.h
psutil-2.0.0/psutil/_psutil_bsd.h
psutil-2.0.0/psutil/_psosx.py
psutil-2.0.0/psutil/_pssunos.py
psutil-2.0.0/psutil/_psutil_windows.h
psutil-2.0.0/psutil/_psutil_windows.c
psutil-2.0.0/psutil/_psutil_common.h
psutil-2.0.0/psutil/_psutil_sunos.c
psutil-2.0.0/psutil/_psbsd.py
psutil-2.0.0/psutil/_psutil_linux.h
psutil-2.0.0/psutil/arch/
psutil-2.0.0/psutil/arch/osx/
psutil-2.0.0/psutil/arch/osx/process_info.h
psutil-2.0.0/psutil/arch/osx/process_info.c
psutil-2.0.0/psutil/arch/windows/
psutil-2.0.0/psutil/arch/windows/ntextapi.h
psutil-2.0.0/psutil/arch/windows/security.c
psutil-2.0.0/psutil/arch/windows/process_info.h
psutil-2.0.0/psutil/arch/windows/process_info.c
psutil-2.0.0/psutil/arch/windows/process_handles.c
psutil-2.0.0/psutil/arch/windows/glpi.h
psutil-2.0.0/psutil/arch/windows/security.h
psutil-2.0.0/psutil/arch/windows/process_handles.h
psutil-2.0.0/psutil/arch/bsd/
psutil-2.0.0/psutil/arch/bsd/process_info.h
psutil-2.0.0/psutil/arch/bsd/process_info.c
psutil-2.0.0/psutil/_psposix.py
psutil-2.0.0/psutil/_psutil_sunos.h
psutil-2.0.0/psutil/_psutil_posix.h
psutil-2.0.0/psutil/_pslinux.py
psutil-2.0.0/psutil/_pswindows.py
[root@localhost peter]# ll
total 692
-rwxrwxrwx 1 root root 163840 Jan 20  2014 jdk-6u22-linux-i586-rpm.bin
drwxr-xr-x 2 root root   4096 Nov 11  2014 mnt
-rw-r--r-- 1 root root  13369 Nov  4  2014 netlog
-rw-r--r-- 1 root root  14568 Nov 24  2014 netlog.1124
drwxr-xr-x 7 1000 1000   4096 Mar 10  2014 psutil-2.0.0
-rwxrwxrwx 1 root root 207168 Nov 26  2015 psutil-2.0.0.tar.gz
drwxr-xr-x 3 root root   4096 Mar 13  2014 rkhunter-1.4.2
-rwxrwxrwx 1 root root 277707 Apr  1  2015 rkhunter-1.4.2.tar.gz


[root@localhost peter]# 
[root@localhost peter]# cd psutil-2.0.0
[root@localhost psutil-2.0.0]# python setup.py install        ###安裝
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.4
creating build/lib.linux-x86_64-2.4/psutil
copying psutil/_psosx.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pssunos.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/__init__.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pslinux.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_psbsd.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_compat.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_pswindows.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_psposix.py -> build/lib.linux-x86_64-2.4/psutil
copying psutil/_common.py -> build/lib.linux-x86_64-2.4/psutil
running build_ext
building '_psutil_linux' extension
creating build/temp.linux-x86_64-2.4
creating build/temp.linux-x86_64-2.4/psutil
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.4/psutil/_psutil_linux.o
psutil/_psutil_linux.c: In function 'psutil_proc_cpu_affinity_set':
psutil/_psutil_linux.c:327: warning: suggest explicit braces to avoid ambiguous 'else'
gcc -pthread -shared build/temp.linux-x86_64-2.4/psutil/_psutil_linux.o -o build/lib.linux-x86_64-2.4/_psutil_linux.so
building '_psutil_posix' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c psutil/_psutil_posix.c -o build/temp.linux-x86_64-2.4/psutil/_psutil_posix.o
gcc -pthread -shared build/temp.linux-x86_64-2.4/psutil/_psutil_posix.o -o build/lib.linux-x86_64-2.4/_psutil_posix.so
running install_lib
copying build/lib.linux-x86_64-2.4/_psutil_posix.so -> /usr/lib64/python2.4/site-packages
copying build/lib.linux-x86_64-2.4/_psutil_linux.so -> /usr/lib64/python2.4/site-packages
creating /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psosx.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pssunos.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/__init__.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pslinux.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psbsd.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_compat.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_pswindows.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_psposix.py -> /usr/lib64/python2.4/site-packages/psutil
copying build/lib.linux-x86_64-2.4/psutil/_common.py -> /usr/lib64/python2.4/site-packages/psutil
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psosx.py to _psosx.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pssunos.py to _pssunos.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/__init__.py to __init__.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pslinux.py to _pslinux.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psbsd.py to _psbsd.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_compat.py to _compat.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_pswindows.py to _pswindows.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_psposix.py to _psposix.pyc
byte-compiling /usr/lib64/python2.4/site-packages/psutil/_common.py to _common.pyc
[root@localhost psutil-2.0.0]# 






3 進入python 試一下 psutil 模塊是否安裝正確
#python






You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)".  Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
>>> import psutil                                                                                                   
>>> psutil.cpu_times()
scputimes(user=7924.96, nice=212.0, system=1933.8, idle=12099434.460000001, iowait=3665.8400000000001, irq=83.379999999999995, softirq=491.57999999999998, steal=0.0)

 >>> psutil.swap_memory()
sswap(total=8439095296L, used=921686016L, free=7517409280L, percent=10.9, sin=2560000, sout=636985344)
>>> psutil.swap_memory().free
7517409280L
>>> 

調用函數: 函數名.參數

後面附函數&參數列表


4  經過一個案例見證如下psutil 的功能

如下經過shell &python實現一個服務器信息的簡單監控,執行我作好的腳步

[root@localhost peter]# ./peter.sh 
 開機時間:2015-10-22 09:22:39
 當前CPU使用率:1.9%
 物理內存:7950M        使用率:10.6%
Swap內存:8024M 使用率:10.9%
 發送:12653809 Byte    發送包數:122654個
 接收:5585369078 Byte  接收包數:46197965個
 盤符: /dev/sda3 掛載點: / 使用率: 29.6%
 盤符: /dev/sda5 掛載點: /oracle 使用率: 29.6%
 盤符: /dev/sda2 掛載點: /oracle/oradata 使用率: 42.8%
 盤符: /dev/sda1 掛載點: /boot 使用率: 11.8%
 盤符: /dev/sdb1 掛載點: /oracle/oradata2 使用率: 53.3%
[root@localhost peter]# 


下面看一下peter.sh的內容內容,你們直接粘過去就能用。有興趣的朋友能夠本身再優化一下


#!/usr/bin/env python
#coding:utf-8
import psutil
import time
import sys
from optparse import OptionParser
parser = OptionParser()  
parser.add_option("-t", "--time", dest="time",
                  help="此參數可查看當前下載佔的帶寬,-t是測試時間", metavar="10")  
parser.add_option("-d", "--deamon",action="store_false", dest="deamon", default=True,  
                  help="後臺運行此腳本") 
 
def Sysinfo():
    Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time()))  
    time.sleep(0.5)
    Cpu_usage = psutil.cpu_percent()
    RAM = int(psutil.virtual_memory().total/(1027*1024))
    RAM_percent = psutil.virtual_memory().percent
    Swap = int(psutil.swap_memory().total/(1027*1024))
    Swap_percent = psutil.swap_memory().percent
    Net_sent = psutil.net_io_counters().bytes_sent
    Net_recv = psutil.net_io_counters().bytes_recv
    Net_spkg = psutil.net_io_counters().packets_sent
    Net_rpkg = psutil.net_io_counters().packets_recv
    BFH = r'%'
    print " \033[1;32m開機時間:%s\033[1;m"  % Boot_Start
    print " \033[1;32m當前CPU使用率:%s%s\033[1;m" % (Cpu_usage,BFH)
    print " \033[1;32m物理內存:%dM\t使用率:%s%s\033[1;m" % (RAM,RAM_percent,BFH)
    print "\033[1;32mSwap內存:%dM\t使用率:%s%s\033[1;m" % (Swap,Swap_percent,BFH)
    print " \033[1;32m發送:%d Byte\t發送包數:%d個\033[1;m" % (Net_sent,Net_spkg)
    print " \033[1;32m接收:%d Byte\t接收包數:%d個\033[1;m" % (Net_recv,Net_rpkg)
 
    for i in psutil.disk_partitions():
        print " \033[1;32m盤符: %s 掛載點: %s 使用率: %s%s\033[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)
 
 
def Net_io(s):
    x = 0
    sum = 0
    while True:
        if x >= s:
            break
        r1 = psutil.net_io_counters().bytes_recv
        time.sleep(1)
        r2 = psutil.net_io_counters().bytes_recv
        y = r2 - r1
        print "%.2f Kb/s" % (y / 1024.0)
        sum += y
        x += 1
    result = sum / x
    print "\033[1;32m%s秒內平均速度:%.2f Kb/s \033[1;m"  % (x,result / 1024.0)
if __name__ == "__main__":
    (options, args) = parser.parse_args()  
    if options.time:
        Net_io(int(options.time))
    else:
        Sysinfo()

######腳本至此結束


附錄1  psutil 模塊的其它用法:

Example usages
CPU

>>> import psutil
>>> psutil.cpu_times()
scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)
>>>
>>> for x in range(3):
...     psutil.cpu_percent(interval=1)
...
4.0
5.9
3.8
>>>
>>> for x in range(3):
...     psutil.cpu_percent(interval=1, percpu=True)
...
[4.0, 6.9, 3.7, 9.2]
[7.0, 8.5, 2.4, 2.1]
[1.2, 9.0, 9.9, 7.2]
>>>
>>>
>>> for x in range(3):
...     psutil.cpu_times_percent(interval=1, percpu=False)
...
scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
>>>
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
2
>>>

Memory

>>> psutil.virtual_memory()
svmem(total=8374149120, available=2081050624, percent=75.1, used=8074080256, free=300068864, active=3294920704, inactive=1361616896, buffers=529895424, cached=1251086336)
>>> psutil.swap_memory()
sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
>>>

Disks

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),
 sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw')]
>>>
>>> psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
>>>
>>> psutil.disk_io_counters(perdisk=False)
sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568)
>>>

Network

>>> psutil.net_io_counters(pernic=True)
{'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
>>>
>>> psutil.net_connections()
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED', pid=1254),
 pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING', pid=2987),
 pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED', pid=None),
 pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT', pid=None)
 ...]
>>>
>>> psutil.net_if_addrs()
{'lo': [snic(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
        snic(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
        snic(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
 'wlan0': [snic(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
           snic(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
           snic(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
>>>
>>> psutil.net_if_stats()
{'eth0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500),
 'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)}

Other system info

>>> psutil.users()
[user(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0),
 user(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0)]
>>>
>>> psutil.boot_time()
1365519115.0
>>>

Process management

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
 268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
 2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,
 4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,
 4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,
 5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
>>>
>>> p = psutil.Process(7055)
>>> p.name()
'python'
>>> p.exe()
'/usr/bin/python'
>>> p.cwd()
'/home/giampaolo'
>>> p.cmdline()
['/usr/bin/python', 'main.py']
>>>
>>> p.status()
'running'
>>> p.username()
'giampaolo'
>>> p.create_time()
1267551141.5019531
>>> p.terminal()
'/dev/pts/0'
>>>
>>> p.uids()
puids(real=1000, effective=1000, saved=1000)
>>> p.gids()
pgids(real=1000, effective=1000, saved=1000)
>>>
>>> p.cpu_times()
pcputimes(user=1.02, system=0.31)
>>> p.cpu_percent(interval=1.0)
12.1
>>> p.cpu_affinity()
[0, 1, 2, 3]
>>> p.cpu_affinity([0])  # set
>>>
>>> p.memory_percent()
0.63423
>>>
>>> p.memory_info()
pmem(rss=7471104, vms=68513792)
>>> p.memory_info_ex()
extmem(rss=9662464, vms=49192960, shared=3612672, text=2564096, lib=0, data=5754880, dirty=0)
>>> p.memory_maps()
[pmmap_grouped(path='/lib/x86_64-linux-gnu/libutil-2.15.so', rss=16384, anonymous=8192, swap=0),
 pmmap_grouped(path='/lib/x86_64-linux-gnu/libc-2.15.so', rss=6384, anonymous=15, swap=0),
 pmmap_grouped(path='/lib/x86_64-linux-gnu/libcrypto.so.1.0.0', rss=34124, anonymous=1245, swap=0),
 pmmap_grouped(path='[heap]', rss=54653, anonymous=8192, swap=0),
 pmmap_grouped(path='[stack]', rss=1542, anonymous=166, swap=0),
 ...]
>>>
>>> p.io_counters()
pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632)
>>>
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/somefile', fd=3)]
>>>
>>> p.connections()
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED'),
 pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING'),
 pconn(fd=119, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED'),
 pconn(fd=123, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT')]
>>>
>>> p.num_threads()
4
>>> p.num_fds()
8
>>> p.threads()
[pthread(id=5234, user_time=22.5, system_time=9.2891),
 pthread(id=5235, user_time=0.0, system_time=0.0),
 pthread(id=5236, user_time=0.0, system_time=0.0),
 pthread(id=5237, user_time=0.0707, system_time=1.1)]
>>>
>>> p.num_ctx_switches()
pctxsw(voluntary=78, involuntary=19)
>>>
>>> p.nice()
0
>>> p.nice(10)  # set
>>>
>>> p.ionice(psutil.IOPRIO_CLASS_IDLE)  # IO priority (Win and Linux only)
>>> p.ionice()
pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
>>>
>>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5))  # set resource limits (Linux only)
>>> p.rlimit(psutil.RLIMIT_NOFILE)
(5, 5)
>>>
>>> p.suspend()
>>> p.resume()
>>>
>>> p.terminate()
>>> p.wait(timeout=3)
0
>>>
>>> psutil.test()
USER         PID %CPU %MEM     VSZ     RSS TTY        START    TIME  COMMAND
root           1  0.0  0.0   24584    2240            Jun17   00:00  init
root           2  0.0  0.0       0       0            Jun17   00:00  kthreadd
root           3  0.0  0.0       0       0            Jun17   00:05  ksoftirqd/0
...
giampaolo  31475  0.0  0.0   20760    3024 /dev/pts/0 Jun19   00:00  python2.4
giampaolo  31721  0.0  2.2  773060  181896            00:04   10:30  chrome
root       31763  0.0  0.0       0       0            00:05   00:00  kworker/0:1
>>>

Further process APIs

>>> for p in psutil.process_iter():
...     print(p)
...
psutil.Process(pid=1, name='init')
psutil.Process(pid=2, name='kthreadd')
psutil.Process(pid=3, name='ksoftirqd/0')
...
>>>
>>> def on_terminate(proc):
...     print("process {} terminated".format(proc))
...
>>> # waits for multiple processes to terminate
>>> gone, alive = psutil.wait_procs(procs_list, 3, callback=on_terminate)
>>>


附錄2  各平臺安裝方法

Installing using pip on UNIX

The easiest way to install psutil on UNIX is by using pip (but first you might need to install python header files; see later). First install pip:

$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py

...then run:

$ pip install psutil

You may need to install gcc and python header files first (see later).
Installing on Windows

Just get the right installer for your Python version and architecture from: https://pypi.python.org/pypi/psutil/#downloadsSince wheels installers are also available you may also use pip.
Compiling on Windows using Visual Studio

In order to compile psutil on Windows you'll need Visual Studio (Mingw32 is no longer supported). You must have the same version of Visual Studio used to compile your installation of Python, that is:

* Python 2.6:  VS 2008 (download it from `here <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_)
* Python 2.7:  VS 2008 (download it from `here <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_)
* Python 3.3, 3.4: VS 2010 (you can download it from `MS website <http://www.visualstudio.com/downloads/download-visual-studio-vs#d-2010-express>`_)
* Python 3.5: `VS 2015 UP <http://www.visualstudio.com/en-au/news/vs2015-preview-vs>`_

...then run:

setup.py build

...or:

make.bat build

Compiling 64 bit versions of Python 2.6 and 2.7 with VS 2008 requires Windows SDK and .NET Framework 3.5 SP1 to be installed first. Once you have those run vcvars64.bat, then compile: http://stackoverflow.com/questions/11072521/
Installing on Linux

gcc is required and so the python headers. They can easily be installed by using the distro package manager. For example, on Debian and Ubuntu:

$ sudo apt-get install gcc python-dev

...on Redhat and CentOS:

$ sudo yum install gcc python-devel

Once done, you can build/install psutil with:

$ python setup.py install

Installing on OS X

OS X installation from source will require gcc which you can obtain as part of the 'XcodeTools' installer from Apple. Then you can run the standard distutils commands. To build only:

$ python setup.py build

To install and build:

$ python setup.py install

Installing on FreeBSD

The same compiler used to install Python must be present on the system in order to build modules using distutils. Assuming it is installed, you can build using the standard distutils commands.

Build only:

$ python setup.py build

Install and build:

$ python setup.py install

Makefile

A makefile is available for both UNIX and Windows (make.bat). It provides some automations for the tasks described above and might be preferred over using setup.py. With it you can:

$ make install    # just install (in --user mode)
$ make uninstall  # uninstall (needs pip)
$ make test       # run tests
$ make clean      # remove installation files

轉自

Python實現linux自動化運維 (1) - CSDN博客 http://blog.csdn.net/lively1982/article/details/50053257

psutil監控CPU內存磁盤並告警 - CSDN博客 http://blog.csdn.net/lisheninasiainfo/article/details/54848054

相關文章
相關標籤/搜索