Sorunun Belirtileri
- Pod’ların sürekli yeniden başlatılması
OutOfMemoryErrorlog kayıtları- Yavaş artan bellek kullanımı
- Sistem performansında düşüş
- Kubernetes’te pod’ların
OOMKilleddurumuna 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:2. Memory Metrikleri İzleme
Prometheus metrikleri ile bellek kullanımını izleyin:jvm_memory_used_bytesjvm_memory_max_bytescontainer_memory_usage_bytes
3. Heap Dump Analizi
Çözüm Önerileri
1. JVM Heap Ayarlarını Optimize Etme
Pod deployment’ında JVM parametrelerini ayarlayın:
Ö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 sayfasına bakın
2. Memory Limit’lerini Artırma
Kubernetes deployment’ında memory limit’lerini artırın: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

