0Pricing
Python Academy · Ders

tracemalloc ile Bellek Profili Oluşturma

Bellek ayırmalarını izleyin ve tracemalloc ile sızıntıları bulun.

tracemalloc ile Bellek Profili Oluşturma, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

tracemalloc Nedir?

tracemalloc, Python bellek ayırmalarını dosya ve satır numarasına göre izleyen bir standart kitaplık modülüdür.

import tracemalloc

tracemalloc.start()

x = [i for i in range(100_000)]

current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()

print(f"Current: {current/1024:.1f} KB")
print(f"Peak:    {peak/1024:.1f} KB")

Anlık Görüntü Alma

Bir anlık görüntü, belirli bir andaki tüm geçerli ayırmaları yakalar. İki anlık görüntüsünü karşılaştırarak aralarında neyin ayrıldığını bulabilirsiniz.

import tracemalloc

tracemalloc.start()

snap1 = tracemalloc.take_snapshot()

data = [{"key": str(i)} for i in range(10_000)]

snap2 = tracemalloc.take_snapshot()

stats = snap2.compare_to(snap1, "lineno")
for stat in stats[:5]:
    print(stat)

Anlık Görüntüleri Filtreleme

İstatistikleri yalnızca uygulamanızın kodunu gösterecek şekilde, standart kitaplığı hariç tutarak filtreleyin.

import tracemalloc

tracemalloc.start()
leak_function()
snap = tracemalloc.take_snapshot()

filters = [tracemalloc.Filter(True, "*/myapp/*")]
stats = snap.filter_traces(filters).statistics("lineno")
for stat in stats[:10]:
    print(stat)

En Çok Bellek Ayıranlar

Satıra veya tam geri izlemeye göre en çok bellek tüketenleri görmek için snapshot.statistics("lineno") ya da "traceback" kullanın.

import tracemalloc

tracemalloc.start(nframe=10)   # track 10 frames deep

big_list = [i**2 for i in range(500_000)]

snap = tracemalloc.take_snapshot()
for stat in snap.statistics("traceback")[:3]:
    print(stat)
    for line in stat.traceback.format():
        print("  ", line)

Bellek Sızıntılarını Bulma

Şüpheli bir sızıntının öncesinde ve sonrasında iki anlık görüntü alın ve bunları karşılaştırın. Anlık görüntüler arasındaki büyüyen istatistikler bir sızıntıya işaret eder.

import tracemalloc

tracemalloc.start()
snap_before = tracemalloc.take_snapshot()

for _ in range(100):
    suspected_leaky_function()

snap_after = tracemalloc.take_snapshot()
diff = snap_after.compare_to(snap_before, "lineno")
for stat in diff[:5]:
    print(stat)

get_traced_memory()

tracemalloc.get_traced_memory(), (current, peak) bayt değerlerini döndürür — hafif öncesi/sonrası kontrolleri için kullanışlıdır.

import tracemalloc

tracemalloc.start()
before, _ = tracemalloc.get_traced_memory()

do_something()

after, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()

print(f"Delta: {(after-before)/1024:.1f} KB, Peak: {peak/1024:.1f} KB")

memory_profiler

memory_profiler, CPU için line_profiler'a benzer şekilde satır satır bellek kullanımını sağlar.

# pip install memory_profiler
from memory_profiler import profile

@profile
def build_data():
    data = [i**2 for i in range(100_000)]
    filtered = [x for x in data if x % 2 == 0]
    return filtered

build_data()
# python -m memory_profiler script.py

memray

Bloomberg tarafından geliştirilen memray, alev grafiği çıktısı sağlayan hızlı bir Python bellek profilleyicisidir.

# pip install memray
# python -m memray run script.py
# python -m memray flamegraph memray-script.py.bin

# Generates an interactive HTML flamegraph
# showing allocations by call stack

Bellek Kullanımını Azaltma

Yaygın teknikler şunlardır: listeler yerine oluşturucuları, __slots__'u, sayısal veriler için array modülünü ve numpy dizilerini kullanmak; ayrıca büyük nesneleri kapanışlarda canlı tutmaktan kaçınmak.

# Instead of:
data = [process(x) for x in huge_list]   # all in memory

# Use a generator:
def gen_data(lst):
    for x in lst:
        yield process(x)

for item in gen_data(huge_list):
    consume(item)   # one at a time

sys.getsizeof()

sys.getsizeof(obj), bir nesnenin bayt cinsinden kullandığı belleği döndürür (sığ ölçüm — başvurulan nesneleri içermez).

import sys

print(sys.getsizeof([]))          # 56
print(sys.getsizeof([1,2,3]))     # 88
print(sys.getsizeof("hello"))     # 54
print(sys.getsizeof({}))          # 64

# For deep size, use recursive measurement:
def deep_size(obj):
    return sys.getsizeof(obj) + sum(
        sys.getsizeof(v) for v in vars(obj).values()
        if hasattr(obj, "__dict__")
    )

Üretimde Profilleme

Ek yükü en aza indirmek için üretimde tracemalloc'u sınırlı nframes değeriyle çalıştırın. Anlık görüntülerini çevrim dışı analiz için bir dosyada saklayın.

import tracemalloc, pickle

tracemalloc.start(nframe=5)   # low overhead

# ... serve some requests ...

snap = tracemalloc.take_snapshot()
with open("snap.pkl","wb") as f:
    pickle.dump(snap, f)
# Analyse later offline

Hızlı Kontrol

tracemalloc.get_traced_memory() tarafından döndürülen iki değer neyi temsil eder?

Özet

Bellek sızıntılarını bulmak için tracemalloc.start() ve anlık görüntüleri kullanın. Anlık görüntülerini compare_to() ile karşılaştırın. Satır satır kullanım için memory_profiler, alev grafikleri için memray kullanın. Oluşturucular, __slots__ ve NumPy dizileriyle bellek kullanımını azaltın.

Sıkça Sorulan Sorular

“tracemalloc ile Bellek Profili Oluşturma” dersi ücretsiz mi?

Evet — “tracemalloc ile Bellek Profili Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“tracemalloc ile Bellek Profili Oluşturma” dersinde ne öğreneceğim?

Bellek ayırmalarını izleyin ve tracemalloc ile sızıntıları bulun. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“tracemalloc ile Bellek Profili Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CPython Başvuru Sayımı
  2. Çöp Toplayıcı ve Döngüsel Başvurular
  3. cProfile ve line_profiler ile Profil Oluşturma
  4. tracemalloc ile Bellek Profili Oluşturma
← Python Academy Sayfasına Dön