Login Sorunu Çözüm Planı

Oturum kapatmadan sistem düzeltmesi

v2 Beklemede

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

Herkes İçin

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ş)
Teknik

Sistem Metrikleri

Redis Uptime: 34 gün (8 Ocak'tan beri)
Memory Fragmentation: 16.18 (Normal: 1-1.5)
Aktif Session: 253 adet
Expired Keys: 18,723,609 adet
Bugünkü Log: 321 MB (11 Şubat)
Haftalık Log: ~3 GB

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
  • SetTenantSessionConfig middleware her request'te DEBUG log yazıyor
  • Session cookie değişimi: muzibu_sessiontenant_1001_session

Çözüm Planı (6 Adım)

1

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
Oturum Etkisi: YOK - Sadece log azalır, kimse çıkış yapmaz
2

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/
Oturum Etkisi: YOK - Loglar ve oturumlar farklı yerlerde
3

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
Oturum Etkisi: YOK - Session DB0, Cache DB1 (ayrı veritabanları)
4

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.

Oturum Etkisi: KORUNUR - RDB'den geri yüklenir (1-2 sn kesinti)
5

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
Oturum Etkisi: YOK - Queue sistemi oturumlardan bağımsız
6

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

Özet Kontrol Listesi