1. Garbage Collector’ı (Çöp Toplayıcı) Anlamak
Bunun nedeni, genellikle karmaşık nesne referanslarının doğru bir şekilde serbest bırakılmamasıdır. Örneğin, döngülerde ya da büyük veri yapılarında bir nesne birden fazla yerde referans alındığında, çöp toplama işlemi bu nesneleri temizlemeyebilir. Çözüm, çöp toplayıcının gerçekten çalışıp çalışmadığını gc modülünü kullanarak kontrol etmektir.
```python
import gc
gc.collect()
```
Bu kod, çöp toplama işlemini manuel olarak tetiklemenizi sağlar. Böylece bellek sızıntılarına karşı ilk adımınızı atmış olursunuz.
2. Memory Profiler Kullanarak Bellek Tüketimini İzleme
Örnek olarak, memory_profiler kütüphanesini kullanabilirsiniz. Bu kütüphane, fonksiyonların ne kadar bellek kullandığını kolayca görmenizi sağlar.
```bash
pip install memory_profiler
```
Ve işte örnek kullanım:
```python
from memory_profiler import profile
@profile
def my_function():
a = [1] * (106)
b = [2] * (2 * 107)
del b
return a
my_function()
```
Yukarıdaki kodda, `@profile` dekoratörü, bellek kullanımını izlemek için kullanılır. Programı çalıştırdıktan sonra, her satırdaki bellek kullanımını detaylı şekilde görebileceksiniz.
3. Heapy ve Objgraph ile Bellek İzleme
Örneğin, bellek sızıntısının hangi nesnelerden kaynaklandığını görmek için objgraph'ı şu şekilde kullanabilirsiniz:
```bash
pip install objgraph
```
Ve ardından şu kodla sızıntı tespitini başlatabilirsiniz:
```python
import objgraph
objgraph.show_growth()
```
Bu kod, nesneler arasındaki büyümeyi ve olası sızıntıları görselleştirerek, hangi nesnelerin bellek sızıntısına neden olduğunu anlamanızı sağlar.
4. Python’un `sys` Modülü ile Bellek Kullanımını İzleme
```python
import sys
def check_memory():
a = [1] * (106)
print(f'Memory used: {sys.getsizeof(a)} bytes')
check_memory()
```
Bu kod, nesnenin bellekte ne kadar yer kapladığını gösterir. Ancak, daha büyük projelerde, bu yöntem tek başına yeterli olmayabilir.
5. Py-spy ile Performans ve Bellek Analizi
Py-spy, Python uygulamanızın hangi noktada bellek tüketimini artırdığını veya hangi fonksiyonların daha fazla bellek harcadığını gösteren anlık analizler sunar.
Py-spy’i kullanmaya başlamak için şu komutu terminalden çalıştırabilirsiniz:
```bash
pip install py-spy
```
Ardından şu komutla bellek ve performans analizine başlayabilirsiniz:
```bash
py-spy top --pid
```
Bu komut, çalışan Python uygulamanızın performansını ve bellek kullanımını gerçek zamanlı olarak gösterir.
Bellek Sızıntılarından Korunmak
- Gereksiz nesne referanslarından kaçının,
- Nesneleri mümkün olduğunca erken serbest bırakın,
- Bellek kullanımı gerektiren işlemler için uygun veri yapıları kullanın.
Unutmayın, bellek sızıntıları sadece bellek tüketimini artırmakla kalmaz, aynı zamanda uygulamanızın performansını da olumsuz yönde etkiler. Bu yüzden bellek yönetimine dikkat etmek, daha hızlı ve verimli yazılımlar geliştirmenize yardımcı olacaktır.