> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Memory Leaks ve OOM (Out of Memory) Hataları

> Apinizer'da memory leak ve Out of Memory hatalarını tespit edebilir, JVM heap ayarlarını optimize edebilir, cache yapılandırmasını yönetebilir ve connection pool ayarlarını düzenleyebilir.

## Sorunun Belirtileri

<Warning>
  Memory leak ve OOM hataları genellikle aşağıdaki belirtilerle kendini gösterir:
</Warning>

* Pod'ların sürekli yeniden başlatılması
* `OutOfMemoryError` log kayıtları
* Yavaş artan bellek kullanımı
* Sistem performansında düşüş
* Kubernetes'te pod'ların `OOMKilled` durumuna geçmesi

## Sorunun Nedenleri

Memory leak ve OOM hataları genellikle şu faktörlerden kaynaklanabilir:

* **Yetersiz Heap Ayarları**: JVM heap boyutu yetersiz olabilir
* **Memory Leak'ler**: Kullanılmayan nesnelerin garbage collection tarafından temizlenmemesi
* **Büyük Veri İşlemleri**: Büyük mesaj gövdelerinin işlenmesi
* **Cache Boyutları**: Cache'in sınırsız büyümesi
* **Connection Pool Sorunları**: Kapatılmayan bağlantılar
* **Thread Pool Sorunları**: Thread'lerin düzgün temizlenmemesi

## Tespit Yöntemleri

### 1. Log Analizi

OOM hatalarını log dosyalarında arayın:

```bash theme={null}
kubectl logs <pod-name> | grep -i "OutOfMemoryError"
kubectl logs <pod-name> | grep -i "java.lang.OutOfMemoryError"
```

### 2. Memory Metrikleri İzleme

Prometheus metrikleri ile bellek kullanımını izleyin:

* `jvm_memory_used_bytes`
* `jvm_memory_max_bytes`
* `container_memory_usage_bytes`

### 3. Heap Dump Analizi

<Steps>
  <Step title="Heap Dump Al">
    Heap dump alarak memory leak'leri tespit edin:

    ```bash theme={null}
    # Heap dump alma
    kubectl exec <pod-name> -- jmap -dump:format=b,file=/tmp/heapdump.hprof <pid>

    # Heap dump'ı pod'dan kopyalama
    kubectl cp <namespace>/<pod-name>:/tmp/heapdump.hprof ./heapdump.hprof
    ```
  </Step>
</Steps>

## Çözüm Önerileri

### 1. JVM Heap Ayarlarını Optimize Etme

<Info>
  Pod deployment'ında JVM parametrelerini ayarlayın:
</Info>

```yaml theme={null}
env:
  - name: JAVA_OPTS
    value: "-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
```

<Note>
  **Öneriler:**

  * Apinizer'ın **otomatik bellek profili**, container belleğine göre uygun GC ve heap yüzdesini seçer (≤768 MB'da Serial GC, 769-1536 MB'da G1GC, >1536 MB'da ZGC)
  * 1536 MB'ın üzerindeki container'larda ZGC otomatik seçilir ve %70 heap kullanır — sub-millisecond GC duraklamaları sağlar
  * Manuel yapılandırma tercih ediyorsanız, tahmin edilebilir duraklama süreleri için G1GC ile MaxGCPauseMillis kullanın
  * Detaylı GC yapılandırma seçenekleri için [JVM Garbage Collector Ayarlama](/tr/operations/yonetici-kilavuzlari/jvm-garbage-collector-ayarlama) sayfasına bakın
</Note>

### 2. Memory Limit'lerini Artırma

Kubernetes deployment'ında memory limit'lerini artırın:

```yaml theme={null}
resources:
  limits:
    memory: "4Gi"
  requests:
    memory: "2Gi"
```

### 3. Cache Yapılandırmasını Optimize Etme

Cache TTL ve boyut limitlerini ayarlayın:

* Cache TTL değerlerini optimize edin
* Cache boyut limitlerini belirleyin
* Gereksiz cache entry'lerini temizleyin

### 4. Connection Pool Ayarlarını Optimize Etme

Connection pool ayarlarını kontrol edin:

* Maksimum connection sayısını sınırlayın
* Connection timeout değerlerini ayarlayın
* Idle connection'ları düzenli olarak temizleyin

### 5. Thread Pool Yönetimi

Thread pool ayarlarını optimize edin:

* Maksimum thread sayısını sınırlayın
* Thread timeout değerlerini ayarlayın
* Thread'lerin düzgün temizlendiğinden emin olun

### 6. Büyük Mesaj İşlemelerini Optimize Etme

Büyük mesaj gövdelerini işlerken:

* Streaming kullanın
* Mesaj boyut limitlerini belirleyin
* Gereksiz veri kopyalamalarından kaçının

## Önleyici Tedbirler

### 1. Düzenli İzleme

* Memory kullanımını düzenli olarak izleyin
* Alert'ler kurarak erken uyarı alın
* Trend analizi yaparak sorunları önceden tespit edin

### 2. Load Testing

* Düzenli load test'ler yapın
* Memory leak'leri erken tespit edin
* Kapasite planlaması yapın

### 3. Code Review

* Memory leak'lere neden olabilecek kodları gözden geçirin
* Resource management'ı kontrol edin
* Best practice'lere uyun

## İlgili Kaynaklar

* [JVM Tuning](/tr/operations/yonetici-kilavuzlari/pod-thread-sayisi-periyodik-izleme)
* [Performans Tuning](/tr/operations/yonetici-kilavuzlari/pod-thread-sayisi-periyodik-izleme)
* [Log Analizi](/tr/operations/log-analizi-kilavuzu/kibana-log-search)
