Kritik Kural: Oturum Silme YOK!
Bu plandaki hiçbir adım kullanıcı oturumlarını silmez. redis-cli FLUSHALL ve benzeri komutlar YASAKTIR.
Teknik Terimlerin Basit Açıklamaları
Redis Nedir?
Kullanıcı oturumlarını tutan bir "hafıza deposu". Siteye giriş yaptığınızda Redis sizi hatırlar ve her sayfada tekrar şifre sorulmaz.
Gerçek hayat örneği:
Otele giriş yaptığınızda aldığınız oda kartı gibi. Kart ile istediğiniz zaman odanıza girebilirsiniz.
Memory Fragmentation (16.18)
Hafızanın parçalanması. Uzun süre açık kalan sistemlerde hafıza "delik deşik" olur ve verimsizleşir. Normal değer 1-1.5, bizde 16.18 (10 kat fazla!).
Gerçek hayat örneği:
Bir dolaba sürekli eşya koyup çıkarınca arada boşluklar kalır, dolap dolu görünür ama az eşya alır. Yeniden düzenlemek gerekir.
Expired Keys (18.7 Milyon)
Süresi dolmuş kayıtlar. Her oturum ve önbellek verisinin bir son kullanma tarihi var. 34 günde 18.7 milyon kayıt süresini doldurmuş ve silinmiş. Bu normal ama çok fazla olması Redis'in yorulduğunu gösterir.
Gerçek hayat örneği:
Marketteki ürünlerin son kullanma tarihi gibi. Tarihi geçen ürünler otomatik raftan kaldırılır. 34 günde 18.7 milyon ürün kalkmış!
Debug Logları (Günde 400MB)
Sistem her işlemde "şunu yaptım, bunu yaptım" diye kayıt tutuyor. Geliştirme aşamasında faydalı ama canlı sistemde gereksiz yük oluşturuyor.
Gerçek hayat örneği:
Bir çalışanın her adımda "şimdi kaleme uzandım, şimdi kalemi aldım, şimdi yazmaya başladım" demesi gibi. İşi yavaşlatır!
Session (Oturum)
Kullanıcının giriş yaptığını gösteren kimlik kartı. Tarayıcıda çerez (cookie), Redis'te kayıt olarak tutulur. Şu an 253 aktif oturum var.
Gerçek hayat örneği:
Konser bileti gibi. Bilet sizdeyken (çerez) ve kapıda listenizde (Redis) olduğunuz sürece içeri girebilirsiniz.
BGSAVE (Yedekleme)
Redis'in hafızasındaki tüm verileri diske kaydetmesi. Restart sonrası veriler bu dosyadan geri yüklenir. Oturumlar korunur!
Gerçek hayat örneği:
Bilgisayarı kapatmadan önce "kaydet" demek gibi. Açtığınızda kaldığınız yerden devam edersiniz.
Mevcut Durum Özeti
Ne Oluyor?
- Sorun: Bazı kullanıcılar giriş yapamıyor
- Redis: 34 gündür yeniden başlatılmamış (yorgun)
- Hafıza: Parçalanma normalin 10 katı (verimsiz)
- Temizlik: 18.7 milyon eski kayıt temizlenmiş (yoğun çalışmış)
- Loglar: Günde 400MB gereksiz kayıt (disk dolmuş)
Sistem Metrikleri
Sorunun Kök Nedeni
Basit Anlatım
Oturum deposu (Redis) 34 gündür hiç dinlenmemiş. Sürekli çalışmaktan hafızası parçalanmış ve yorulmuş. Aynı zamanda sistem her tıklamada gereksiz notlar alıyor (debug log), bu da işleri yavaşlatıyor.
Sonuç: Bazı kullanıcıların giriş bilgileri düzgün okunamıyor veya yazılamıyor.
Teknik Analiz
-
mem_fragmentation_ratio: 16.18- Bellek verimsiz kullanılıyor -
SetTenantSessionConfigmiddleware her request'te DEBUG log yazıyor -
Session cookie değişimi:
muzibu_session→tenant_1001_session
Çözüm Planı (6 Adım)
Debug Logları Kapat
Güvenli🧑 Basit Anlatım
Sistem şu an her işlemde "şunu yaptım" diye not alıyor. Bu notları kapatacağız. Kullanıcılar hiçbir şey farketmez, sadece sistem daha hızlı çalışır.
🔧 Teknik Detay
app/Http/Middleware/SetTenantSessionConfig.php dosyasındaki
Log::debug() satırları kapatılacak.
Çalıştırılacak Komutlar:
# Middleware'deki debug logları yorum satırı yap
# Dosya: app/Http/Middleware/SetTenantSessionConfig.php
# Log::debug('🍪 SetTenantSessionConfig...') satırını // ile kapat
Eski Log Dosyalarını Temizle
Güvenli🧑 Basit Anlatım
Son 1 haftanın gereksiz notları 3GB+ yer kaplıyor. Eski notları çöpe atacağız. Site hızlanır, disk alanı açılır.
🔧 Teknik Detay
storage/logs/ altındaki 7 günden eski *.log dosyaları silinecek.
Çalıştırılacak Komutlar:
# Önce boyutu gör
du -sh storage/logs/
# 7 günden eski log dosyalarını sil
find storage/logs/ -name "*.log" -mtime +7 -delete
# Sonucu kontrol et
du -sh storage/logs/
Laravel Cache Temizle (Session Hariç)
Güvenli🧑 Basit Anlatım
Sistem ayarlarını ve hazır dosyaları yenileyeceğiz. Kullanıcı oturumları ayrı yerde tutulduğu için etkilenmez.
Oturumlar: Redis DB0 (dokunulmaz)
Önbellek: Redis DB1 (temizlenir)
🔧 Teknik Detay
REDIS_SESSION_DB=0
REDIS_CACHE_DB=1
cache:clear sadece DB1'i temizler.
Çalıştırılacak Komutlar:
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear # DB1 - session etkilenmez!
php artisan responsecache:clear
# OPcache temizle
curl -s -k https://muzibu.com/opcache-reset.php
# Yeniden cache'le
php artisan config:cache
php artisan route:cache
Redis BGSAVE + Graceful Restart
Dikkatli🧑 Basit Anlatım
Oturum deposunu yeniden başlatacağız AMA önce tüm oturumları diske kaydedeceğiz (yedek alacağız). Yeniden başladığında bu yedekten geri yüklenecek.
Kimse çıkış yapmış olmayacak!
🔧 Teknik Detay
1. BGSAVE - RDB snapshot oluşturur
2. LASTSAVE - Bittiğini kontrol eder
3. systemctl restart redis
4. Redis açılınca RDB'den yükler
Çalıştırılacak Komutlar:
# 1. Önce mevcut session sayısını kaydet (sonra karşılaştıracağız)
redis-cli KEYS "*session*" | wc -l
# 2. RDB snapshot al (arka planda, siteyi yavaşlatmaz)
redis-cli BGSAVE
# 3. BGSAVE'in bitmesini bekle (LASTSAVE değişene kadar)
redis-cli LASTSAVE
# 4. Graceful restart (1-2 saniye kesinti)
sudo systemctl restart redis
# 5. Session sayısını doğrula (aynı olmalı!)
redis-cli KEYS "*session*" | wc -l
# 6. Fragmentation düzeldi mi kontrol et
redis-cli INFO memory | grep mem_fragmentation
KRİTİK: BGSAVE tamamlanmadan restart YAPMA! LASTSAVE timestamp'inin değiştiğinden emin ol.
Horizon Restart
Güvenli🧑 Basit Anlatım
Arka plan işlemcisini yenileyeceğiz. E-posta gönderimi, bildirimler gibi işler kuyrukta bekler, hiçbiri kaybolmaz.
🔧 Teknik Detay
horizon-muzibu.service restart edilecek. Queue job'ları Redis'te bekler.
Çalıştırılacak Komutlar:
sudo systemctl restart horizon-muzibu
sudo systemctl status horizon-muzibu
Doğrulama ve Test
Kontrol🧑 Basit Anlatım
Her şeyin düzgün çalıştığını kontrol edeceğiz:
- ✓ Site açılıyor mu?
- ✓ Giriş sayfası çalışıyor mu?
- ✓ Oturum sayısı aynı mı?
- ✓ Hafıza düzeldi mi?
🔧 Beklenen Değerler
Fragmentation: < 2
Session sayısı: ~253 (aynı)
Site durumu: 200 OK
Hata: 0
Çalıştırılacak Komutlar:
# 1. Redis durumu (fragmentation düşmeli)
redis-cli INFO memory | grep -E "used_memory_human|mem_fragmentation"
# 2. Session sayısı (öncekiyle aynı olmalı: ~253)
redis-cli KEYS "*session*" | wc -l
# 3. Site erişim testi
curl -s -k -I https://www.muzibu.com/ | head -n 1
# 4. Login sayfası testi
curl -s -k -I https://www.muzibu.com/login | head -n 1
# 5. Son log hatalarını kontrol et
tail -50 storage/logs/laravel.log | grep -i "error\|exception"
Kesinlikle Yapılmayacaklar
Aşağıdaki komutlar TÜM OTURUMLARI SİLER ve tüm kullanıcılar çıkış yapmış olur:
🚫 Redis Komutları
-
redis-cli FLUSHALL(Her şeyi siler!) -
redis-cli FLUSHDB(DB'yi siler) -
redis-cli DEL *session*(Oturumları siler) - BGSAVE'siz restart (Veri kaybı!)
🚫 Laravel Komutları
-
php artisan session:clear -
php artisan auth:clear-resets