반응형
Python psutil 라이브러리로 시스템 정보 수집 및 실시간 모니터링 만들기
psutil은 Python으로 시스템 정보를 수집하고, 프로세스를 제어하며, 리소스를 모니터링할 수 있는 강력한 라이브러리입니다. 이 글에서는 psutil의 기본 개념부터 시작해 실전 예제와 PySide6를 활용한 GUI 모니터링 앱까지 구현해보며, 실무에서 psutil을 어떻게 활용할 수 있는지 정리해봅니다.
🛠️ psutil 이란?
- psutil(process and system utilities)은 Python에서 CPU, 메모리, 디스크, 네트워크, 프로세스 등의 정보를 조회하거나 제어할 수 있게 해주는 라이브러리입니다.
- 시스템 성능 분석, 리소스 모니터링, 자동화 스크립트, GUI 연동 등 다양한 분야에서 활용됩니다.
🔐 라이선스 정보
- BSD 3-Clause License (상업적 사용 가능, 출처 고지 필요)
📖 공식 문서
🧰 주요 기능 정리
기능 | 설명 | 함수 |
CPU 사용률 | 현재 CPU 퍼센트 조회 | cpu_percent() |
메모리 사용량 | 전체/사용 가능 메모리 조회 | virtual_memory() |
디스크 사용량 | 디스크 사용 상태 | disk_usage('/') |
네트워크 상태 | 입출력 바이트 | net_io_counters() |
부팅 시간 | 시스템 부팅 시간 | boot_time() |
프로세스 관리 | 이름, PID, 상태, 종료 등 | Process(pid) |
✍️ 실전 예제 1: 시스템 정보 출력 스크립트
import psutil
import datetime
print("CPU 사용률:", psutil.cpu_percent(interval=1), "%")
mem = psutil.virtual_memory()
print(f"메모리: 총 {mem.total}, 사용 중 {mem.used}, 사용 가능 {mem.available}")
disk = psutil.disk_usage('/')
print(f"디스크 사용률: {disk.percent}%")
net = psutil.net_io_counters()
print(f"네트워크 송신: {net.bytes_sent}, 수신: {net.bytes_recv}")
boot_time = datetime.datetime.fromtimestamp(psutil.boot_time())
print("부팅 시간:", boot_time)
반응형
🖥️ 실전 예제 2: PySide6를 이용한 실시간 리소스 모니터링 앱
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QTimer
import psutil
import sys
class SystemMonitor(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("System Monitor")
self.resize(300, 150)
self.cpu_label = QLabel()
self.memory_label = QLabel()
self.disk_label = QLabel()
layout = QVBoxLayout()
layout.addWidget(self.cpu_label)
layout.addWidget(self.memory_label)
layout.addWidget(self.disk_label)
self.setLayout(layout)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_info)
self.timer.start(1000)
self.update_info()
def update_info(self):
self.cpu_label.setText(f"CPU 사용률: {psutil.cpu_percent()} %")
mem = psutil.virtual_memory()
self.memory_label.setText(f"메모리 사용률: {mem.percent} %")
disk = psutil.disk_usage('/')
self.disk_label.setText(f"디스크 사용률: {disk.percent} %")
if __name__ == "__main__":
app = QApplication(sys.argv)
monitor = SystemMonitor()
monitor.show()
sys.exit(app.exec())
💡 실행 전 pip install psutil PySide6 명령어로 패키지를 설치해야 합니다.
🔒 프로세스 강제 종료 예제
import psutil
def kill_process(pid):
try:
p = psutil.Process(pid)
p.terminate()
p.wait(timeout=3)
print(f"PID {pid} 종료됨")
except psutil.NoSuchProcess:
print("해당 PID의 프로세스가 없습니다.")
except psutil.TimeoutExpired:
print("종료 시간 초과, 강제 종료 시도")
p.kill()
⚠️ psutil 사용 시 주의할 점
주의사항 | 설명 |
권한 제한 | 일부 프로세스나 시스템 정보는 관리자 권한 필요 |
운영체제 차이 | Windows, Linux, macOS 간 지원 여부 다름 |
실시간 모니터링 | cpu_percent()는 interval을 지정해야 정확 |
성능 이슈 | 짧은 간격으로 Process 정보를 반복 조회 시 오버헤드 발생 |
반응형
'코딩취미 > Python' 카테고리의 다른 글
PySide6 팝업에서 Cancel 클릭 시 메인 GUI 닫기 (0) | 2025.05.09 |
---|---|
Python 프로젝트에서 폴더 관리 자동화 (0) | 2025.05.09 |
경로 생성 시 오류 없이 안전하게 처리하는 구조 (0) | 2025.05.03 |
Pandas 정렬 고급편: 다중 조건 정렬과 GroupBy 후 정렬 완전 정복 (0) | 2025.05.03 |
os.path.join에서 NoneType 오류가 발생하는 이유와 해결 방법 (0) | 2025.05.02 |