Python İle Psutil Kütüphanesi Kullanarak Sistem Kaynak Takibi Nasıl Yapılır?

Python İle Psutil Kütüphanesi Kullanarak Sistem Kaynak Takibi Nasıl Yapılır?
Python İle Psutil Kütüphanesi Kullanarak Sistem Kaynak Takibi Nasıl Yapılır?

Ön Hazırlık ve Kurulum

Psutil kütüphanesini kullanmaya başlamadan önce, Python ortamınızın hazır olduğundan emin olmalısınız. Psutil, Python'ın standart kütüphanesinde yer almadığı için harici olarak yüklenmesi gerekir. Terminal veya komut satırı üzerinden aşağıdaki komutu kullanarak en güncel sürümü kurabilirsiniz.

pip install psutil

Kurulumun başarılı olduğunu doğrulamak için Python etkileşimli kabuğunda import psutil komutunu çalıştırabilirsiniz. Eğer herhangi bir hata mesajı almazsanız, kütüphaneniz kullanıma hazırdır. Projelerinizde sanal ortam (virtual environment) kullanmanız, bağımlılıkların çakışmaması adına şiddetle önerilir.

CPU Kullanımını İzleme ve Analiz Etme

CPU, bir sistemin beynidir ve performans darboğazlarının en sık yaşandığı yerdir. Psutil ile CPU kullanım oranlarını anlık veya belirli bir zaman aralığında yüzde bazında takip edebilirsiniz. Aşağıdaki örnek, sistemin genel CPU kullanımını yüzde cinsinden ekrana yazdırır.

import psutil
import time

# 1 saniyelik aralıklarla CPU kullanımını izle
for i in range(5):
    cpu_kullanimi = psutil.cpu_percent(interval=1)
    print(f"CPU Kullanımı: %{cpu_kullanimi}")

Burada interval parametresi, ölçümün ne kadar sürede bir yapılacağını belirler. Eğer bu değeri 0 veya None yaparsanız, fonksiyon çağrıldığı anki anlık değeri döndürür. Çok çekirdekli sistemlerde her çekirdeği ayrı ayrı izlemek için percpu=True parametresini kullanabilirsiniz.

Bellek (RAM) ve Takas Alanı Yönetimi

Sistem kaynak takibinde bellek kullanımı, uygulamanızın kararlılığı için kritik veriler sunar. Psutil, fiziksel RAM ve sanal bellek (swap) hakkında detaylı bilgi sağlar. Aşağıdaki kod, toplam bellek miktarını ve o anki kullanım oranını hesaplar.

import psutil

# Bellek bilgilerini al
bellek = psutil.virtual_memory()

print(f"Toplam RAM: {bellek.total / (1024**3):.2f} GB")
print(f"Kullanılan RAM: {bellek.used / (1024**3):.2f} GB")
print(f"Kullanım Yüzdesi: %{bellek.percent}")

Burada elde edilen değerler bayt (byte) cinsindendir. Bu yüzden 1024'ün küplerine bölerek Gigabayt (GB) birimine dönüştürüyoruz. Bellek sızıntılarını (memory leak) tespit etmek için bu fonksiyonu düzenli aralıklarla log dosyasına yazdırabilirsiniz.

Disk ve Depolama Birimi İzleme

Disk alanı dolduğunda uygulamaların hata vermesi kaçınılmazdır. Psutil ile hem disk kullanımını hem de G/Ç (Girdi/Çıktı) istatistiklerini takip edebilirsiniz. Aşağıdaki örnek, sistemdeki disk bölümlerinin kullanım durumunu listeler.

import psutil

# Disk bölümlerini listele
partitions = psutil.disk_partitions()

for partition in partitions:
    try:
        usage = psutil.disk_usage(partition.mountpoint)
        print(f"Sürücü: {partition.device} | Toplam: {usage.total // (1024**3)} GB | Kullanılan: %{usage.percent}")
    except PermissionError:
        continue

Bu kodda PermissionError yakalamamızın sebebi, bazı sistem bölümlerine erişim yetkimizin olmamasıdır. Bu tür hataları yönetmek, uygulamanızın çökmesini engeller.

Ağ Trafiği ve Bağlantı Takibi

Sunucu uygulamalarında ağ trafiğinin izlenmesi, bant genişliği darboğazlarını anlamak için önemlidir. Psutil ile ağ arayüzlerinden geçen toplam veri miktarını takip edebilirsiniz.

import psutil

# Ağ istatistiklerini al
net_io = psutil.net_io_counters()

print(f"Gönderilen Veri: {net_io.bytes_sent / (1024**2):.2f} MB")
print(f"Alınan Veri: {net_io.bytes_recv / (1024**2):.2f} MB")

Bu veriler, sistem açıldığından beri geçen toplam veriyi gösterir. Anlık hız ölçümü yapmak istiyorsanız, iki ölçüm arasında kısa bir süre bekleyip farkı almanız gerekir.

Süreç (Process) Yönetimi ve İzleme

Sistemde çalışan süreçleri listelemek ve belirli bir sürecin kaynak tüketimini izlemek, gelişmiş sistem araçlarının temelidir. Aşağıdaki örnek, çalışan süreçlerin adlarını ve PID (Process ID) numaralarını listeler.

import psutil

# Çalışan süreçleri listele
for proc in psutil.process_iter(['pid', 'name', 'username']):
    print(f"PID: {proc.info['pid']} | İsim: {proc.info['name']} | Kullanıcı: {proc.info['username']}")

process_iter fonksiyonu, sistemdeki tüm süreçler üzerinde bir yineleyici (iterator) oluşturur. Bu işlem yoğun sistemlerde kaynak tüketebilir, bu yüzden sadece ihtiyacınız olan sütunları (pid, name vb.) belirtmek performansı artırır.

Sistem Kaynak Takibi Yöntemleri Karşılaştırması

Yöntem Avantajı Dezavantajı
Psutil (Python) Çapraz platform, kolay kullanım Yüksek frekanslı izlemede CPU tüketimi
/proc (Linux) Çok hızlı, düşük kaynak tüketimi Sadece Linux ile sınırlı
OS Modülü Dahili kütüphane Çok kısıtlı sistem bilgisi

Kritik Güvenlik Uyarısı: Sistem kaynaklarını izleyen scriptler yazarken, bu scriptlerin sistemde hangi kullanıcı yetkisiyle çalıştığına dikkat edin. Özellikle süreçleri sonlandırma veya sistem ayarlarını değiştirme yetkisi olan scriptleri asla dış dünyaya (internet) açık portlarda çalıştırmayın. Kodunuzda her zaman girdi doğrulama yapın ve yetkisiz erişimlere karşı scriptinizi koruma altına alın.

Sıkça Sorulan Sorular

Psutil ile anlık CPU hızını nasıl ölçerim?

psutil.cpu_freq() fonksiyonu, işlemcinin o anki frekans değerlerini MHz cinsinden döndürür. Bu, özellikle aşırı ısınma sorunlarını analiz ederken faydalıdır.

Psutil neden bazı süreçlerde Access Denied hatası veriyor?

Bu hata, o sürecin sizden daha yüksek bir yetki seviyesinde (örneğin root veya yönetici) çalışmasından kaynaklanır. Scriptinizi yönetici haklarıyla çalıştırmak bu sorunu çözebilir.

Fiziksel bellek ile sanal bellek arasındaki fark nedir?

Fiziksel bellek (RAM), bilgisayarın doğrudan kullandığı donanımdır. Sanal bellek (swap) ise RAM dolduğunda diskin bir kısmının RAM gibi kullanılmasıdır; daha yavaştır.

Psutil ile ağ bağlantılarını nasıl listelerim?

psutil.net_connections() fonksiyonu, sistemdeki tüm aktif ağ bağlantılarını (TCP/UDP) port numaraları ve durumlarıyla birlikte döndürür.

Psutil güvenli mi?

Evet, kütüphane açık kaynaklıdır ve dünya çapında binlerce geliştirici tarafından denetlenmektedir. Ancak, yazdığınız scriptin sistem üzerindeki yetkilerini sınırlı tutmak her zaman iyi bir güvenlik pratiğidir.

Psutil ile İzleme Verilerini Görselleştirme ve Loglama

Sistem kaynaklarını anlık olarak izlemek oldukça faydalıdır, ancak bu verilerin geçmişe dönük analizini yapmak sistemin darboğazlarını tespit etmek için kritiktir. Topladığınız verileri basit bir CSV dosyasına yazarak, ilerleyen süreçte Pandas veya Matplotlib gibi kütüphanelerle analiz edebilirsiniz.

Aşağıdaki örnek, CPU ve RAM kullanımını belirli aralıklarla bir dosyaya kaydeden temel bir loglama mekanizmasıdır:

import psutil
import time
import csv
from datetime import datetime

def log_system_stats(filename="system_stats.csv", interval=5, duration=60):
    with open(filename, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Zaman", "CPU_Kullanim_Yuzdesi", "RAM_Kullanim_Yuzdesi"])
        
        end_time = time.time() + duration
        while time.time() < end_time:
            cpu = psutil.cpu_percent(interval=1)
            ram = psutil.virtual_memory().percent
            timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            
            writer.writerow([timestamp, cpu, ram])
            print(f"{timestamp} - CPU: {cpu}% | RAM: {ram}%")
            time.sleep(interval)

# 60 saniye boyunca 5 saniyelik aralıklarla kayıt yapar
log_system_stats()

Performans Optimizasyonu ve İleri İpuçları

Psutil kullanırken sistem kaynaklarını tüketmemek için dikkat etmeniz gereken bazı performans odaklı yaklaşımlar mevcuttur. Özellikle çok sayıda süreç (process) üzerinde işlem yaparken, tüm süreç listesini sürekli çekmek yerine sadece ihtiyacınız olan PID'leri hedeflemek uygulamanızın hızını artıracaktır.

Verimli Süreç Filtreleme

Tüm süreçleri taramak yerine, belirli bir kullanıcıya ait veya belirli bir ismi taşıyan süreçleri filtrelemek kaynak kullanımını minimize eder:

import psutil

def get_specific_process_info(process_name):
    for proc in psutil.process_iter(['pid', 'name', 'username']):
        try:
            if process_name.lower() in proc.info['name'].lower():
                print(f"Bulundu: {proc.info['name']} (PID: {proc.info['pid']})")
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            continue

get_specific_process_info("python")

Hata Ayıklama ve İstisna Yönetimi

Sistem izleme araçları çalışırken, izlenen süreç aniden sonlanabilir veya sistem kısıtlamaları nedeniyle erişim engellenebilir. Bu durumları yönetmek için psutil.NoSuchProcess ve psutil.AccessDenied istisnalarını her zaman yakalamanız önerilir. Bu, uygulamanızın beklenmedik bir şekilde çökmesini engeller.

İstisna Neden Çözüm
NoSuchProcess Süreç izleme sırasında kapandı. İstisnayı yakalayıp döngüye devam edin.
AccessDenied Yetersiz yetki (Root/Admin gerekli). Scripti yönetici haklarıyla çalıştırın.
ZombieProcess Süreç sonlanmış ancak hala tabloda. İstisnayı yoksayın veya loglayın.

Bu ileri seviye yaklaşımlar, özellikle 7/24 çalışan izleme servisleri (daemon) geliştirirken uygulamanızın kararlılığını doğrudan etkileyecektir.

Sonuç

Python ile psutil kütüphanesi kullanarak sistem kaynak takibi yapmak, sistem yönetimi ve uygulama izleme süreçlerinde size büyük esneklik sağlar. Bu rehberde öğrendiğiniz temel metotlar, daha karmaşık izleme sistemleri kurmanız için bir temel oluşturacaktır. Bir sonraki adım olarak, topladığınız bu verileri bir veritabanına kaydederek zaman içindeki değişimleri grafiksel olarak görselleştiren bir dashboard (gösterge paneli) yazmayı deneyebilirsiniz. Sistem takibi, proaktif bir yaklaşım için en güçlü aracınızdır.

Bu yazıya tepkinizi paylaşın:
Zeynep Çelik

Modern yaşam ipuçları ve kişisel gelişim üzerine içerik tasarlıyorum. Günlük hayatı kolaylaştıran hızlı ve etkili çözüm odaklı yazılar yazmayı seviyorum.

Yorumlar (0)

Yorum Yaz