Merhaba THS Okurları
Bugün backend ve sistem tarafında en kafa karıştıran durumlardan birini ele alıyoruz:CPU düşük ama sistem yavaş!
- CPU %15–20
- RAM normal
- Disk boşta
- Ama API geç cevap veriyor
- Thread’ler bekliyor
Kullanıcı diyor ki:
“Makine boş ama neden yavaş?”
Turkhacks ekibi olarak net söylüyoruz:
Bu durum genelde Thread Starvation veya Lock problemi.
Yani sistem boş görünür ama aslında kilitlenmiştir.
Sorunun Adı: Thread Starvation
Thread starvation:- Thread’lerin çalışacak iş bulamaması değil
- Çalışmak isteyip kaynak beklemesi
Yani:
- Thread var
- CPU boş
- Ama iş ilerlemiyor
Asıl Sebep: Lock (Kilitleme) Problemleri
Java’da:
- synchronized
- ReentrantLock
- database lock
yanlış kullanılırsa:
Tüm sistem beklemeye girer
Belirtiler
CPU Düşük Ama Response Yavaş
En kritik işaret
Thread Dump’ta WAITING / BLOCKED
- Thread’ler çalışmıyor
- Bekliyor
Trafik Artınca Sistem Çöküyor
Lock büyür → herkes bekler
Timeout Hataları
- API cevap vermez
- Client timeout olur
Sağlıklı vs Kilitlenmiş Sistem
| Durum | Sağlıklı | Lock Sorunu |
|---|---|---|
| CPU | Yüksek | Düşük |
| Thread durumu | RUNNABLE | BLOCKED |
| Response | Hızlı | Yavaş |
| Ölçeklenebilirlik | Var | Yok |
En Yaygın Hatalar
Büyük synchronized blokları
synchronized(this) {
// ağır işlem
}
Tüm thread’ler sıraya girer
Tek Kaynağa Bağımlılık
- Tek DB connection
- Tek cache erişimi
Bottleneck oluşur
Yanlış Thread Pool
- Thread sayısı az
- Queue dolu
İşler bekler
Database Lock
- Uzun transaction
- Row lock
Nested Lock (Deadlock Riski)
Sistem kilitlenir
Nasıl Tespit Edilir?
Turkhacks ekibi olarak kullandığımız yöntemler:
Thread Dump Al
jstack <pid>
Thread durumlarını gör
BLOCKED Thread’leri Bul
Kim kimin kilidini tutuyor analiz et
Profiling Yap
- VisualVM
- JProfiler
DB Lock Kontrolü
Uzun süren query var mı?Çözüm Yöntemleri
✔ Lock Süresini Azalt
- Kritik bölgeyi küçült
- Gereksiz synchronized kaldır
✔ Concurrent Yapılar Kullan
ConcurrentHashMap
Daha az kilit
✔ Thread Pool Optimize Et
- Doğru thread sayısı
- Queue ayarı
✔ Database Optimizasyonu
- Transaction süresini kısalt
- Index kullan
✔ Async / Virtual Thread Kullan
Beklemeyi azalt
En Büyük Yanılgı
“CPU boş → sistem sağlıklı”CPU boş olabilir çünkü sistem çalışamıyordur.
Gerçek Senaryo
| Durum | Sonuç |
|---|---|
| 100 request | Hızlı |
| 500 request | Yavaş |
| 1000 request | Kilitlenme |
Sebep: lock büyümesi
Altın Kural
SONUÇ
Sevgili THS okurları,CPU düşük diye sistem sağlıklı sanmak en büyük hatalardan biridir.
Turkhacks ekibi olarak net söylüyoruz:
✔ Thread dump analiz etmeyi öğren
✔ Lock kullanımını minimize et
✔ DB ve thread pool’u optimize et
✔ Profiling yapmadan karar verme
Unutmayın:
Bir sonraki ileri seviye analizde görüşmek üzere. Thread’leriniz çalışsın, sisteminiz akıcı olsun
Son düzenleme:


