Sunteți pe pagina 1din 8

psutil 5.0.

1
psutil is a cross-platform library for retrieving information onrunning processes and system
utilization (CPU, memory, disks, network)in Python.

Package Documentation

Quick links
 Home page
 Install
 Documentation
 Download
 Forum
 Blog
 Development guide
 What’s new

Summary
psutil (process and system utilities) is a cross-platform library for retrieving information
on running processes and system utilization (CPU, memory, disks, network) in Python. It is
useful mainly for system monitoring, profiling and limiting process
resources and management of running processes. It implements many functionalities
offered by command line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice,
ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap. It currently supports Linux, Windows,
OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures,
with Python versions from 2.6 to 3.5 (users of Python 2.4 and 2.5 may
use 2.1.3 version).PyPy is also known to work.

Example applications
Also see https://github.com/giampaolo/psutil/tree/master/scripts.

Projects using psutil


At the time of writing there are over 4200 open source projects on github which depend from
psutil. Here’s some I find particularly interesting:

 https://github.com/facebook/osquery/
 https://github.com/nicolargo/glances
 https://github.com/google/grr
 https://github.com/Jahaja/psdash
 https://github.com/ajenti/ajenti
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
>>>
>>> psutil.cpu_stats()
scpustats(ctx_switches=20455687, interrupts=6598984,
soft_interrupts=2134212, syscalls=0)

Memory
>>> psutil.virtual_memory()
svmem(total=10367352832, available=6472179712, percent=37.6,
used=8186245120, free=2181107712, active=4748992512,
inactive=2758115328, buffers=790724608, cached=3500347392,
shared=787554304)
>>> 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, read_merged_count=619166,
write_merged_count=812396, busy_time=4523412)
>>>

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.pid
7055
>>> p.ppid()
7054
>>> p.parent()
<psutil.Process(pid=7054, name='bash') at 140008329539408>
>>> p.children()
[<psutil.Process(pid=8031, name='python') at 14020832451977>,
<psutil.Process(pid=8044, name='python') at 19229444921932>]
>>>
>>> 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, children_user=0.32,
children_system=0.1)
>>> p.cpu_percent(interval=1.0)
12.1
>>> p.cpu_affinity()
[0, 1, 2, 3]
>>> p.cpu_affinity([0]) # set
>>>
>>> p.memory_info()
pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0,
data=7262208, dirty=0)
>>> p.memory_full_info() # "real" USS memory usage (Linux, OSX, Win
only)
pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200,
lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)
>>> p.memory_percent()
0.7823
>>> p.memory_maps()
[pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so',
rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0,
private_clean=20480, private_dirty=12288, referenced=32768,
anonymous=12288, swap=0),
pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568,
size=3842048, pss=3821568, shared_clean=0, shared_dirty=0,
private_clean=0, private_dirty=3821568, referenced=3575808,
anonymous=3821568, swap=0),
pmmap_grouped(path='/lib/x8664-linux-gnu/libcrypto.so.0.1',
rss=34124, rss=32768, size=2134016, pss=15360, shared_clean=24576,
shared_dirty=0, private_clean=0, private_dirty=8192,
referenced=24576, anonymous=8192, swap=0),
pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768,
shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768,
referenced=32768, anonymous=32768, swap=0),
pmmap_grouped(path='[stack]', rss=2465792, size=2494464,
pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0,
private_dirty=2465792, referenced=2277376, anonymous=2465792,
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/setup.py', fd=3,
position=0, mode='r', flags=32768),
popenfile(path='/var/log/monitd', fd=4, position=235542, mode='a',
flags=33793)]
>>>
>>> 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.environ()
{'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--
color=auto',
'XDG_CONFIG_DIRS': '/etc/xdg/xdg-
ubuntu:/usr/share/upstart/xdg:/etc/xdg', 'COLORTERM': 'gnome-
terminal',
...}
>>>
>>> p.as_dict()
{'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63,
involuntary=1), 'pid': 5457, ...}
>>> p.is_running()
True
>>> 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, timeout=3,
callback=on_terminate)
>>>

Windows services
>>> list(psutil.win_service_iter())
[<WindowsService(name='AeLookupSvc', display_name='Application
Experience') at 38850096>,
<WindowsService(name='ALG', display_name='Application Layer Gateway
Service') at 38850128>,
<WindowsService(name='APNMCP', display_name='Ask Update Service') at
38850160>,
<WindowsService(name='AppIDSvc', display_name='Application
Identity') at 38850192>,
...]
>>> s = psutil.win_service_get('alg')
>>> s.as_dict()
{'binpath': 'C:\\Windows\\System32\\alg.exe',
'description': 'Provides support for 3rd party protocol plug-ins for
Internet Connection Sharing',
'display_name': 'Application Layer Gateway Service',
'name': 'alg',
'pid': None,
'start_type': 'manual',
'status': 'stopped',
'username': 'NT AUTHORITY\\LocalService'}

Donate
A lot of time and effort went into making psutil as it is right now. If you feel psutil is useful to you
or your business and want to support its future development please consider donating me
(Giampaolo Rodola’) some money. I only ask for a small donation, but of course I appreciate
any amount.

Don’t want to donate money? Then maybe you could write me a recommendation on Linkedin.

Mailing list
http://groups.google.com/group/psutil/

More Info :
https://pythonhosted.org/psutil/

S-ar putea să vă placă și