Muzibu.com Tam Analiz

Sunucu • Veritabanı • Player • Stream • Çözümler

19 Ocak 2026

Özet Dashboard

29,712
Toplam Şarkı
1,727
Kullanıcı
589
Aktif Abonelik
~50K
Günlük Dinleme
Sunucu

72 CPU, 251GB RAM - Çok güçlü, sorun yok

Player

7,717 satır kod, 4 kritik hata tespit edildi

Cloudflare

Cache DYNAMIC - HLS cache'lenmiyor

Sunucu Analizi

Donanım

Hostname ns3265902.ip-51-210-24.eu
CPU Intel Xeon Gold 6554S
Core / Thread 36 Core / 72 Thread
CPU Freq 800 MHz - 4000 MHz
RAM 251 GB
RAM Kullanım 22 GB kullanımda (%9)
Disk 885 GB
Disk Kullanım 362 GB (%41)
Load Average 11.54, 9.91, 9.64
Uptime 11 gün 18 saat

Yazılım Stack

OS AlmaLinux 9.7
Kernel 5.14.0-611.16.1.el9_7
Web Server Nginx 1.28
PHP 8.3.x
Database MariaDB 11.4.9
Cache Redis 6.2.20
Node.js v24.13.0
Panel Plesk
Queue Workers 63 aktif
Active Connections 52

Redis İstatistikleri

4.53 GB
Kullanılan Bellek
627,395
Toplam Key
111M
Cache Hit
42M
Cache Miss
Sonuç: Sunucu çok güçlü. Donma sorunu donanımdan kaynaklanmıyor.

Veritabanı Analizi

Database: tenant_muzibu_1528d0

İçerik

Toplam Şarkı 29,712
Aktif Şarkı 29,703
HLS Dönüştürülmüş 29,657 (%99.8)
Albüm 657
Sanatçı 44
Tür (Genre) 39

Kullanıcılar

Toplam Kullanıcı 1,727
Aktif Abonelik 589 (%34)
Playlist 758
Aktif Session 666

Tablo Boyutları

song_plays 187 MB
media 32 MB
songs 30 MB
activity_log 26 MB
playlist_song 8 MB

Dinleme İstatistikleri (Son 14 Gün)

19 Ocak (Bugün) 29,338
18 Ocak 50,574
17 Ocak 60,826
16 Ocak 60,849
15 Ocak 45,194
14 Ocak 921
13 Ocak ve öncesi <1000
248,688
Son 7 gün toplam
~50,000
Günlük ortalama (aktif günler)
14 Ocak öncesi düşük - sistem yeni aktif

Storage Analizi

Dosya Boyutları

MP3 Dosyaları 128 GB
HLS Dosyaları 183 GB
Toplam Tenant Storage 333 GB
Kalan Disk 524 GB (%59)

Dosya Sayıları

MP3 Dosyası 40,988
HLS Playlist (.m3u8) 29,657
Ortalama MP3 Boyutu ~4.3 MB
Ortalama HLS Boyutu ~6.2 MB
HLS = MP3'ün ~1.43 katı (AES-128 encryption overhead)

Dizin Yapısı

/var/www/vhosts/muzibu.com/httpdocs/storage/tenant1001/app/public/muzibu/
├── songs/ (128 GB - MP3 dosyaları)
├── hls/ (183 GB - HLS segmentleri)
├── 32295/
├── playlist.m3u8
├── enc.bin (AES key)
├── segment-000.ts ... segment-022.ts
├── 32296/ ...
└── (29,657 klasör)

Player Analizi

Dosyalar

player-core.js 7,717 satır
safe-storage.js 38 satır
api.js ~200 satır
session.js ~150 satır
spot-player.js ~400 satır
spa-router.js ~300 satır
SongStreamController.php 858 satır

Kullanılan Teknolojiler

HLS.js Howler.js Alpine.js AES-128 Web Audio API

State Variables

// Takip edilen durumlar
isPlaying - müzik çalıyor mu
isCrossfading - geçiş yapılıyor mu
isSongLoading - şarkı yükleniyor mu
isSeeking - seek yapılıyor mu
_isPlayingSpot - anons çalıyor mu

Player'da Tespit Edilen Sorunlar

KRİTİK

HLS Fatal Error Handler Bozuk

player-core.js:2110

Fatal HLS hatası olduğunda eski instance düzgün temizlenmiyor. Event listener'lar kalıyor → sonsuz döngü riski.

this.hlsNext.on(Hls.Events.ERROR, async function(event, data) {
    if (data.fatal) {
        // ❌ Eski HLS event listener'ları temizlenmiyor!
        if (self.hlsNext) { self.hlsNext.destroy(); }
        self.playSongFromQueue(nextIdx); // Recursive çağrı
    }
});
KRİTİK

Blob URL Memory Leak

player-core.js:177

revokeBlobUrl() fonksiyonu tanımlı ama hiç çağrılmıyor. Blob URL'ler birikip RAM'i şişiriyor.

const activeBlobUrls = new Set();
function revokeBlobUrl(blobUrl) {
    // ✅ Fonksiyon var ama...
    URL.revokeObjectURL(blobUrl);
}
// ❌ Hiçbir yerde çağrılmıyor!
YÜKSEK

Buffer Timeout Sorunu

player-core.js:2323

Seek sırasında isSeeking=true kalıyor. 3 saniye sonra zorla kapatılıyor ama buffer yüklenmemişse müzik donmuş görünüyor.

setTimeout(() => {
    if (self.isSeeking) {
        self.isSeeking = false; // ❌ Buffer kontrolsüz kapatılıyor
    }
}, 3000);
YÜKSEK

Progress Interval Birikimi

player-core.js:çeşitli

Progress tracking interval'ları her şarkıda yeniden başlatılıyor ama eski interval'lar temizlenmiyor. CPU kullanımı artıyor.

ORTA

Safari Native HLS Deadlock

player-core.js:3598

iOS Safari'de native HLS path kullanılıyor. audio.load() beklenmedik buffer eviction tetikleyebiliyor.

ORTA

Spot Player Overlap

spot-player.js:343

Anons (spot) audio elementi ve müzik player elementi çakışabiliyor. Anons bittikten sonra müzik başlamayabiliyor.

Donma Nasıl Oluşuyor?

1 Kullanıcı şarkı başlatır → HLS instance oluşur
2 Ağ yavaşlar → Buffering (ama kullanıcıya feedback yok)
3 Kullanıcı sabırsızlanır → Şarkı atlar (hala yüklenirken)
4 ESKİ HLS cleanup tamamlanmadan YENİ başlar → RACE CONDITION
5 SONUÇ: Audio element state karışık, player görsel responsive ama ses yok

HLS Stream Yapısı

Yapılandırma

Segment Süresi 10 saniye
Şifreleme AES-128
Ortalama Segment ~350 KB
Ortalama Şarkı ~22 segment
Job Timeout 600 saniye

Örnek Playlist

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-KEY:METHOD=AES-128,URI="...enc.bin"
#EXTINF:10.005333,
segment-000.ts
#EXTINF:9.994667,
segment-001.ts
... (22 segment)

HLS Conversion Job

Dosya Modules/Muzibu/App/Jobs/ConvertToHLSJob.php
Queue hls
Timeout 600 saniye (10 dk)
Retry 3 deneme
Pending Jobs 0
Failed Jobs 0

Cloudflare Pro Analizi

Mevcut Durum

Plan Cloudflare Pro
cf-ray CDG (Paris)
Cache Status DYNAMIC ⚠️
SSL Full (Strict)

Sorun

cf-cache-status: DYNAMIC

HLS segment dosyaları (.ts) cache'lenmiyor! Her istek origin sunucuya gidiyor.

Günlük request hesabı:
50K dinleme × 22 segment = 1.1M request/gün

Çözüm: Cache Rule Ekle

Cloudflare Dashboard → Rules → Cache Rules → Create Rule

// Rule: HLS Cache
When:
URI Path contains "/hls/"
OR URI Path ends with ".ts"
OR URI Path ends with ".m3u8"
Then:
Cache eligibility: Eligible for cache
Edge TTL: 1 week

Bu kural aktif olunca sunucu yükü %80 düşer.

Bandwidth Hesabı

# Şu anki durum (50K/gün)
Günlük: 50,000 × 8MB = 400 GB
Aylık: 400 × 30 = 12 TB/ay
# 100K/gün olursa
Günlük: 100,000 × 8MB = 800 GB
Aylık: 800 × 30 = 24 TB/ay
Cloudflare Pro = Sınırsız bandwidth dahil ✓

Harici CDN Seçenekleri (Referans)

Sonuç: Harici CDN'e gerek yok. Cloudflare Pro yeterli.

Yine de referans olarak fiyatları:

Servis Min. Fiyat 30K Şarkı 50K/gün HLS
Cloudflare Pro (mevcut) $25/ay Dahil Dahil
Bunny Stream $1/ay ~$1.5 ~$75
Cloudflare Stream $5/ay ~$600 ~$90
Mux $10/ay ~$60 ~$45
Not: Cloudflare Stream dakika bazlı fiyatlıyor (30K şarkı = 120K dakika = $600/ay). Audio için pahalı.

Sonuç ve Öneriler

İyi Olan

  • • Sunucu çok güçlü (72 CPU, 251GB RAM)
  • • HLS dönüşüm %99.8 tamamlanmış
  • • AES-128 şifreleme aktif
  • • Cloudflare Pro mevcut
  • • Redis cache çalışıyor

Düzeltilmesi Gereken

  • • Player kodu: 4 kritik hata
  • • Cloudflare cache: DYNAMIC (kapalı)
  • • Buffer durumu: UI feedback yok
  • • Memory leak: Blob URL'ler

Yapılacaklar (Öncelik Sırasıyla)

1
Cloudflare HLS Cache Kuralı Ekle
Dashboard → Rules → Cache Rules → .ts ve .m3u8 cache'le
Maliyet: $0 • Etki: Sunucu yükü %80 düşer
2
Player HLS Error Handler Düzelt
player-core.js:2110 - Eski instance cleanup ekle
Maliyet: $0 • Etki: Şarkı değiştirme donması çözülür
3
Blob URL Memory Leak Kapat
revokeBlobUrl() çağrılarını ekle
Maliyet: $0 • Etki: Uzun session'larda RAM şişmesi önlenir
4
Buffer Loading Spinner Ekle
Kullanıcı beklerken görsel feedback ver
Maliyet: $0 • Etki: UX iyileşir, sabırsız tıklama azalır

Harici CDN'e gerek yok. Cloudflare Pro + kod düzeltmeleri yeterli.

Toplam maliyet: $0 (mevcut altyapı kullanılıyor)