본문 바로가기
코딩취미/Python

Python psutil 라이브러리로 시스템 정보 수집 및 실시간 모니터링 만들기

by 브링블링 2025. 5. 3.
반응형

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 정보를 반복 조회 시 오버헤드 발생
반응형