Python psutil Kütüphanesi ve Sistem Kaynaklarını İzleme

Python ile sistem yönetimi, süreç izleme (process monitoring) ve kaynak analizi denildiğinde akla gelen ilk ve en güçlü kütüphanelerden biri psutil (python process and system utilities) kütüphanesidir. Çapraz platform (Cross-platform) desteği sayesinde Linux, macOS ve Windows üzerinde kod değiştirmeden CPU, bellek, disk ve ağ kullanımını anlık olarak takip etmenizi sağlar.

Bu yazıda, psutil kütüphanesini projelerinize nasıl dahil edebileceğinizi ve günlük geliştirmelerde hayatınızı kolaylaştıracak temel kod bloklarını adım adım inceleyeceğiz.

Gözünüzü korkutmasın psutil kütüphanesini aslında Görev Yöneticisi ile benzer mantıkla çalışıyor. Tabi kullanacağınız özelliklere göre farklılık gösterecektir. Siz ne yapmak istiyorsanız o yöne doğru evrilecektir.

psutil Kütüphanesinin Kurulumu ve Temel Kullanımı

İlk önce psutil kütüphanesini kurmamız gerekiyor. Bunun için aşağıdaki pip komutunu terminalde çalıştırmamız gerekiyor.

pip install psutil

Bu kod sayede sistemimize psutil kütüphanesini kurmuş oluyoruz.

Python
import psutil

for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):
    try:
        info = proc.info
        print(f"PID: {info['pid']:<6} | "
              f"İsim: {info['name']:<30} | "
              f"Kullanıcı: {info['username']} | "
              f"CPU: {info['cpu_percent']:.2f}% | "
              f"RAM: {info['memory_percent']:.2f}%")
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        continue

Yukarıdaki şekilde çok genel bir kullanımı var. Bunu yaptığınızda bilgisayarınızdaki işlemlerin hepsini görebilirsiniz. Çıktısı aşağıdakine benzer olur:

PowerShell
PID: 0      | İsim: System Idle Process            | Kullanıcı: NT AUTHORITY\SYSTEM | CPU: 0.00% | RAM: 0.00%
PID: 4      | İsim: System                         | Kullanıcı: NT AUTHORITY\SYSTEM | CPU: 0.00% | RAM: 0.03%
PID: 188    | İsim:                                | Kullanıcı: None | CPU: 0.00% | RAM: 0.39%
PID: 232    | İsim: Registry                       | Kullanıcı: None | CPU: 0.00% | RAM: 0.22%
PID: 652    | İsim: msedgewebview2.exe             | Kullanıcı: DESKTOP-K54Q021\Amca | CPU: 0.00% | RAM: 0.13%
PID: 660    | İsim: svchost.exe                    | Kullanıcı: None | CPU: 0.00% | RAM: 0.07%
PID: 776    | İsim: smss.exe                       | Kullanıcı: None | CPU: 0.00% | RAM: 0.01%
PID: 1116   | İsim: csrss.exe                      | Kullanıcı: None | CPU: 0.00% | RAM: 0.04%
PID: 1228   | İsim: wininit.exe                    | Kullanıcı: None | CPU: 0.00% | RAM: 0.05%
PID: 1296   | İsim: SecurityHealthService.exe      | Kullanıcı: None | CPU: 0.00% | RAM: 0.15%
PID: 1304   | İsim: services.exe                   | Kullanıcı: None | CPU: 0.00% | RAM: 0.11%
PID: 1324   | İsim: LsaIso.exe                     | Kullanıcı: None | CPU: 0.00% | RAM: 0.02%

Görev Yöneticisi’ndeki İşlemler gibi duruyor. Aradaki fark ise Görev Yöneticisi anlık veri çekiyor. Bu kod ise sanki anlık fotoğraf çekiyormuş gibisiniz.

Asıl soru şu: Görev Yöneticisi anlık gösteriyorsa daha iyi değil mi? Neden bunu kullanayım?

Kısmen haklısınız. Bu haliyle kullanınca Görev Yöneticisi daha mantıklı geliyor.

  1. Otomasyon: Belirli aralıklarla çalıştırıp log tutabilirsiniz
  2. Uzaktan izleme: Sunucuda SSH üzerinden çalıştırabilirsiniz
  3. Alarm sistemi: CPU %90’ı (ya da siz kaç belirlerseniz) geçince e-posta gönderebilirsiniz
  4. Raporlama: Veritabanına kaydedip trend analizi yapabilirsiniz
  5. Özelleştirme: Sadece ilgilendiğiniz işlemleri filtreleyebilirsiniz

psutil kütüphanesi ile ilgili yapabileceklerimize bakalım.

CPU Kullanımına Göre İşlemleri Sıralama

Burada küçük bir konuya değinmek lazım. Yukarıdaki çıktıda görebileceğiniz gibi. CPU kullanımı 0.00% olarak gösteriyor. Çünkü dediğim gibi şu an için anlık görüntü gibi. CPU kullanımı için ise iki farklı zamandaki ölçüm gerekiyor. Bunun için aslında iki ölçüm yapmak gerekiyor.

Aşağıdaki kod ile iki ölçüm arasına 2 saniye koyup ona göre en çok CPU harcayan 10 tanesini CPU tüketim oranına göre listelemeye çalışacağız.

Python
import psutil
import time

# 1. ADIM: Tüm işlemleri bul ve ilk CPU ölçümünü yap (referans noktası oluştur)
process_list = []
for proc in psutil.process_iter(['pid', 'name', 'username', 'memory_percent']):
    try:
        # İlk çağrı - sadece referans noktası oluşturur, değer önemsiz
        proc.cpu_percent(interval=None)
        process_list.append(proc)
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # İşlem kapanmışsa veya erişim engellenmişse atla
        continue

# 2. ADIM: 2 saniye bekle (CPU kullanımını doğru ölçmek için)
time.sleep(2)

# 3. ADIM: Gerçek CPU değerlerini al ve listeye ekle
processes = []
for proc in process_list:
    try:
        info = {
            'pid': proc.pid,                    # İşlem kimliği
            'name': proc.name(),                # İşlem adı
            'username': proc.username(),        # İşlemi çalıştıran kullanıcı
            'cpu_percent': proc.cpu_percent(interval=None),  # Gerçek CPU kullanımı (2 saniyelik ölçüm)
            'memory_percent': proc.memory_percent()           # RAM kullanımı
        }
        processes.append(info)
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # Ölçüm sırasında işlem kapanmışsa atla
        continue

# 4. ADIM: CPU kullanımına göre azalan sırada sırala (en yüksek en üstte)
processes.sort(key=lambda x: x['cpu_percent'], reverse=True)

# 5. ADIM: Sadece ilk 10 işlemi göster
print("=" * 100)
print(f"{'PID':<8} | {'İsim':<30} | {'Kullanıcı':<25} | {'CPU':<10} | {'RAM':<10}")
print("=" * 100)

for info in processes[:10]:  # İlk 10 işlem
    print(f"{info['pid']:<8} | "
          f"{info['name']:<30} | "
          f"{info['username']:<25} | "
          f"{info['cpu_percent']:<9.2f}% | "
          f"{info['memory_percent']:.2f}%")

print("=" * 100)
print(f"Toplam {len(processes)} işlem tarandı, en çok CPU kullanan 10 işlem gösteriliyor.")
PowerShell
====================================================================================================
PID      | İsim                           | Kullanıcı                 | CPU        | RAM       
====================================================================================================
0        | System Idle Process            | NT AUTHORITY\SYSTEM       | 667.20   % | 0.00%
14956    | crosvm.exe                     | DESKTOP-K54Q021\Amca      | 190.40   % | 14.97%
26516    | Service.exe                    | DESKTOP-K54Q021\Amca      | 56.00    % | 1.75%
15536    | brave.exe                      | DESKTOP-K54Q021\Amca      | 54.80    % | 1.98%
23100    | crosvm.exe                     | DESKTOP-K54Q021\Amca      | 54.50    % | 2.66%
4        | System                         | NT AUTHORITY\SYSTEM       | 15.90    % | 0.03%
14108    | Code.exe                       | DESKTOP-K54Q021\Amca      | 11.90    % | 1.54%
21468    | Code.exe                       | DESKTOP-K54Q021\Amca      | 7.40     % | 1.26%
11432    | Code.exe                       | DESKTOP-K54Q021\Amca      | 6.20     % | 2.25%
28056    | brave.exe                      | DESKTOP-K54Q021\Amca      | 3.80     % | 3.08%
====================================================================================================
Toplam 152 işlem tarandı, en çok CPU kullanan 10 işlem gösteriliyor.

RAM Kullanımına Göre Sıralama

Python
import psutil

# Tüm işlemleri bul ve bilgilerini al
processes = []
for proc in psutil.process_iter(['pid', 'name', 'username', 'memory_percent']):
    try:
        info = proc.info
        # username None ise boş string ata
        if info['username'] is None:
            info['username'] = ''
        processes.append(info)
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # İşlem kapanmışsa veya erişim engellenmişse atla
        continue

# RAM kullanımına göre azalan sırada sırala (en yüksek en üstte)
processes.sort(key=lambda x: x['memory_percent'], reverse=True)

# İlk 10 işlemi göster
print("=" * 90)
print(f"{'PID':<8} | {'İsim':<30} | {'Kullanıcı':<25} | {'RAM':<10}")
print("=" * 90)

for info in processes[:10]:  # İlk 10 işlem
    print(f"{info['pid']:<8} | "
          f"{info['name']:<30} | "
          f"{info['username']:<25} | "
          f"{info['memory_percent']:.2f}%")

print("=" * 90)
print(f"Toplam {len(processes)} işlem tarandı, en çok RAM kullanan 10 işlem gösteriliyor.")
PowerShell
==========================================================================================
PID      | İsim                           | Kullanıcı                 | RAM       
==========================================================================================
14956    | crosvm.exe                     | DESKTOP-K54Q021\Amca      | 15.00%
3164     | MemCompression                 |                           | 8.71%
28056    | brave.exe                      | DESKTOP-K54Q021\Amca      | 3.01%
23100    | crosvm.exe                     | DESKTOP-K54Q021\Amca      | 2.65%
25816    | explorer.exe                   | DESKTOP-K54Q021\Amca      | 2.28%
28428    | chrome.exe                     | DESKTOP-K54Q021\Amca      | 2.15%
15536    | brave.exe                      | DESKTOP-K54Q021\Amca      | 2.13%
11432    | Code.exe                       | DESKTOP-K54Q021\Amca      | 2.05%
12280    | Code.exe                       | DESKTOP-K54Q021\Amca      | 2.03%
13804    | chrome.exe                     | DESKTOP-K54Q021\Amca      | 1.90%
==========================================================================================
Toplam 276 işlem tarandı, en çok RAM kullanan 10 işlem gösteriliyor.
PS C:\Users\Amca\Desktop\Python\Dersler> 

Belirli Bir CPU Kullanımını Geçenleri Listeleyen Kod

Python
import psutil
import time

# 1. ADIM: Tüm işlemleri bul ve ilk CPU ölçümünü yap (referans noktası oluştur)
process_list = []
for proc in psutil.process_iter(['pid', 'name', 'username', 'memory_percent']):
    try:
        # İlk çağrı - sadece referans noktası oluşturur, değer önemsiz
        proc.cpu_percent(interval=None)
        process_list.append(proc)
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # İşlem kapanmışsa veya erişim engellenmişse atla
        continue

# 2. ADIM: 2 saniye bekle (CPU kullanımını doğru ölçmek için)
time.sleep(2)

# 3. ADIM: Gerçek CPU değerlerini al ve sadece %100 üzeri olanları filtrele
high_cpu_processes = []
for proc in process_list:
    try:
        cpu = proc.cpu_percent(interval=None)
        # Sadece CPU kullanımı %100'ün üzerinde olanları ekle
        if cpu > 100.0:
            info = {
                'pid': proc.pid,
                'name': proc.name(),
                'username': proc.username() or '',  # None ise boş string ata
                'cpu_percent': cpu,
                'memory_percent': proc.memory_percent()
            }
            high_cpu_processes.append(info)
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        continue

# 4. ADIM: CPU kullanımına göre azalan sırada sırala
high_cpu_processes.sort(key=lambda x: x['cpu_percent'], reverse=True)

# 5. ADIM: Sonuçları göster
print("=" * 100)
print(f"{'PID':<8} | {'İsim':<30} | {'Kullanıcı':<25} | {'CPU':<10} | {'RAM':<10}")
print("=" * 100)

if high_cpu_processes:
    for info in high_cpu_processes:
        print(f"{info['pid']:<8} | "
              f"{info['name']:<30} | "
              f"{info['username']:<25} | "
              f"{info['cpu_percent']:<9.2f}% | "
              f"{info['memory_percent']:.2f}%")
else:
    print("⚠️  CPU kullanımı %100'ün üzerinde olan işlem bulunamadı.")

print("=" * 100)
print(f"Toplam {len(process_list)} işlem tarandı, {len(high_cpu_processes)} işlem %100 üzeri CPU kullanıyor.")
PowerShell
====================================================================================================
PID      | İsim                           | Kullanıcı                 | CPU        | RAM       
====================================================================================================
0        | System Idle Process            | NT AUTHORITY\SYSTEM       | 490.40   % | 0.00%
14956    | crosvm.exe                     | DESKTOP-K54Q021\Amca      | 171.50   % | 15.02%
====================================================================================================

Daha fazla psutil Kütüphanesinin kullanımı için burayı kontrol edebilirsiniz: https://psutil.readthedocs.io/stable/

Benzer Yazılar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir