psutil은 주로 시스템 모니터링, 프로파일링, 프로세스 리소스 제한 및 실행중인 프로세스 관리에 유용합니다.

psutil은 기본적으로 제공되는 모듈이 아닙니다. pip를 이용해 설치하여야 합니다.

 

1. 시스템 관련기능(System related fuctions) - CPU

psutil.cpu_times(percpu=False)

cpu 시간을 튜플로 리턴합니다. percpu가 True로 되면 시스템의 각 cpu에 대해서 튜플로 리턴합니다.

 

 

psutil.cpu_percent(interval=None, percpu=False)

현재 시스템의 전체 cpu 사용률을 백분율로 리턴해줍니다. interval 옵션의 경우 최소 0.1에서 몇초간 호출하는 것을 추천합니다. 0이나 none의 경우 의미없는 값을 리턴합니다. percpu가 True로 되면 시스템의 각 cpu의 사용률을 백분율로 리턴해줍니다.

 

psutil.cpu_times_percent(interval=None , percpu=False) 

cpu시간에 대한 사용율을 리턴합니다.

 

psutil.cpu_count(logical=True)

logical 플래그가 False라면 물리적 코어의 수를 리턴하고 True면 논리적 코어의 수를 리턴한다. 

 - Memory

psutil.virtual_memory()

시스템 메모리 사용량을 바이트 단위로 다음 항목을 포함하여 튜플로 리턴합니다.

total : 총 메모리

available : 시스템을 스왑하지 않고 프로세스에 즉시 제공할 수 있는 메모리. 실제 메모리 사용량을 모니터링 하는데 사용됩니다.

used : 사용되는 메모리, 플랫폼에 따라 다르게 계산됩니다. total - used 메모리가 반드시 free 메모리와 일치하지는 않습니다.

free : 실제 메모리 여유량.

active : 현재 사용중이거나 최근에 사용된 메모리

inactive : 사용중이 아닌 메모리

buffers : 파일 시스템, 메타 데이터와 같은 것들을 위한 캐시

shared : 여러 프로세스에서 동시에 액세스 가능한 메모리

slab : 커널 내부 데이터 구조 캐시

wired : 항상 ram에 남아있는 것으로 표시되는 메모리

 

psutil.swap_memory()

시스템 스왑 메모리 사용량을 다음 항목을 포함하여 튜플로 리턴합니다.

total : 총 스왑 메모리

used : 사용중인 스왑 메모리

free : 사용가능한 스왑 메모리

percent : 사용량

sin : 시스템이 디스크에서 스왑한 바이트 수 (누적)

sout : 시스템이 디스크에서 스왑한 바이트 수 (누적)

 - Disks

psutil.disk_partitions(all=False)

마운트된 모든 디스크 파티션을 "df" 명령어와 유사하게 장치, 마운트지점 및 파일 시스템 유형을 포함한 튜플로 리턴합니다.

 

psutil.disk_usage(path)

total, used, free, percent 항목을 포함하여 튜플로 반환합니다.

사용 예

https://github.com/giampaolo/psutil/blob/master/scripts/disk_usage.py

 

 

 - Network

psutil.net_connections(kind='inet') 

시스템 전체 소켓 연결을 튜블로 리턴합니다. 

fd : socket file descriptor, 윈도우와 sunOS에서는 항상 -1

family : address family

type : address type

laddr : local address

raddr : remote address

status : TCP 연결의 상태

pid : 소켓이 연결된 process id

 

psutil.net_if_addrs()

key가 NIC 이름이고 값이 NIC에 할당된 주소인 튜플 목록인 딕셔너리로 리턴합니다.

family : address family

address : 기본 NIC 주소

netmask : netmask 주소

broadcast : broadcast 주소

ptp : 포인트 투 포인트 주소(일반적으로 VPN)

 

psutil.net_if_stats()

key가 NIC 이름이고 값이 NIC에 할당된 주소인 튜플 목록인 딕셔너리로 리턴합니다.

isup : NIC가 작동중인지 여부를 나타냄

duplex : duplex 통신 유형

speed : MB로 표시되는 NIC 속도

mtu : 바이트 단위로 표시되는 NIC의 최대 전송 단위

 

2. Process

psutil.pids()

현재 실행중인 PID를 정렬해 리턴합니다.

 

psutil.process_iter(attrs=None, ad_value=None, new_only=False) 

사용법 예:

>>> import psutil
>>> for proc in psutil.process_iter(attrs=['pid', 'name', 'username']):
...     print(proc.info)
...
{'name': 'systemd', 'pid': 1, 'username': 'root'}
{'name': 'kthreadd', 'pid': 2, 'username': 'root'}
{'name': 'ksoftirqd/0', 'pid': 3, 'username': 'root'}
...

딕셔너리로 데이터 구조 생성 예:

>>> import psutil
>>> procs = {p.pid: p.info for p in psutil.process_iter(attrs=['name', 'username'])}
>>> procs
{1: {'name': 'systemd', 'username': 'root'},
 2: {'name': 'kthreadd', 'username': 'root'},
 3: {'name': 'ksoftirqd/0', 'username': 'root'},
 ...}

이름으로 필터링 :

>>> import psutil
>>> [p.info for p in psutil.process_iter(attrs=['pid', 'name']) if 'python' in p.info['name']]
[{'name': 'python3', 'pid': 21947},
 {'name': 'python', 'pid': 23835}]

새로운 프로세스만 가져오기 :

>>> import psutil
>>> for proc in psutil.process_iter(attrs=['pid', 'name'], new_only=True):
...     print(proc.info)
...

 

psutil.pid_exists(pid) 

pid가 현재 프로세스 목록에 있는지 확인합니다. 

 

psutil.wait_procs(procs, timeout=None, callback=None) 

 

 

 

출처

https://psutil.readthedocs.io/en/latest/