aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Lag Çözümü: Sunucu ve Ağ Performans Ayarı

Metin2 lag çözümü, çoğu sunucu sahibinin er ya da geç karşılaştığı ama yanlış yerde aradığı bir konudur. Oyuncular "lag var" dediğinde aslında üç farklı sorundan bahsediyor olabilirler: yüksek ping (ağ gecikmesi), düşük FPS (istemci tarafı) veya sunucunun komutları geç işlemesi (server tick gecikmesi). Bu üçünü ayırt etmeden yapılan her müdahale ya işe yaramaz ya da yeni sorun yaratır. Bu yazıda gecikmeyi önce doğru teşhis edip ardından sunucu ve ağ tarafında adım adım nasıl gidereceğini anlatıyorum.

Önce teşhis: lag nereden geliyor?

Müdahaleye geçmeden önce sorunun kaynağını sayısal olarak ölçmelisin. "Hissetmek" yeterli değil; ping, paket kaybı ve sunucu yükü üç ayrı metriktir.

  • Ağ gecikmesi: Oyuncudan sunucuya giden yolun süresi. Oyun içi pingin yüksek ama herkeste yüksekse büyük ihtimalle sunucu konumu veya ağ; tek tek oyuncularda yüksekse onların hattı.
  • Paket kaybı: Kopmalar, ışınlanmalar ve "geri sarma" hissi genelde kayıp pingden değil paket kaybından gelir.
  • Sunucu yükü: CPU bir çekirdekte sürekli %100'e dayanıyorsa oyun mantığı (core/db) komutları geç işler; ping düşük olsa bile oyun "ağır" hisseder.

Linux tabanlı bir VPS'te ilk bakacağın yer canlı kaynak kullanımıdır:

htop                 # CPU/RAM dağılımı, hangi process yüklü
mpstat -P ALL 2      # çekirdek başına CPU (tek çekirdek doluyor mu?)
ss -s                # açık soket/bağlantı özeti

Metin2 emülatörlerinde oyun mantığı tek bir çekirdekte ağır çalışma eğilimindedir. Toplam CPU %25 görünse bile tek çekirdek %100'deyse darboğaz odur.

Ağ gecikmesini ölçmek

Pingi oyuna güvenmek yerine ağ katmanında ölç. mtr, hem ortalama gecikmeyi hem de hangi atlamada (hop) paket kaybı başladığını gösterdiği için ping ve traceroute'tan daha kullanışlıdır:

mtr -rwzbc 100 OYUNCU_IP
# -c 100: 100 paket gönder, ortalama daha güvenilir olur
# Son satırdaki Loss% ve Avg sütunlarına bak

Eğer paket kaybı ilk hoplarda değil de yolun ortasında bir sağlayıcıda başlıyorsa sorun senin sunucunda değil, transit ağdadır; bu durumda hosting sağlayıcına ticket açıp güzergâhı (route) düzelttirmek gerekir. Sürekli yüksek ping ise çoğu zaman coğrafi mesafe sorunudur: oyuncuların çoğu Türkiye'deyse sunucuyu Almanya yerine daha yakın bir veri merkezine almak, hiçbir yazılım ayarının veremeyeceği kadar net bir kazanç sağlar.

Sunucu tarafı: çekirdek ve veritabanı darboğazları

Sunucu yükünden kaynaklı lagın en yaygın iki sebebi quest/AI döngüleri ve yavaş veritabanı sorgularıdır.

  • Ağır quest'ler: Her oyuncuda saniyede birçok kez çalışan when ... begin blokları, özellikle döngü ve sık timer kullananlar CPU'yu boğar. Sürekli tetiklenen quest'leri olay bazlı (event-driven) hale getir.
  • İndekssiz sorgular: player, item gibi büyük tablolarda indeks eksikse her sorgu tam tablo taraması yapar. MySQL'de yavaş sorguları açıkça gör:
-- my.cnf altında slow query log
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1        # 1 saniyeden uzun sorguları yakala

Logda tekrar eden bir sorgu görürsen EXPLAIN ile planını incele; type: ALL görüyorsan o sütuna indeks ekle. InnoDB kullanıyorsan innodb_buffer_pool_size'ı sunucu RAM'inin %50-70'ine ayarlamak disk I/O kaynaklı takılmaları belirgin azaltır.

Ağ yığını ve bağlantı ayarları

Oyun gerçek zamanlı küçük paketler gönderir; bu yüzden çekirdek ağ parametreleri ve güvenlik duvarı önemlidir. Linux'ta bağlantı izleme tablosunun (conntrack) dolması, yeni bağlantıların reddedilmesine ve ani lag dalgalarına yol açabilir:

sysctl net.netfilter.nf_conntrack_count   # mevcut kayıt sayısı
sysctl net.netfilter.nf_conntrack_max     # üst sınır
# sınıra yaklaşıyorsa kalıcı olarak yükselt (/etc/sysctl.conf):
# net.netfilter.nf_conntrack_max = 262144

Ayrıca DDoS koruması ya da yanlış yapılandırılmış bir iptables kuralı meşru oyun paketlerini geciktiriyor olabilir. Oyun portunu rate-limit eden kuralları gözden geçir; UDP/TCP karışımını yanlış filtrelemek sessiz paket düşmelerine yol açar.

İstemci tarafı: lag mı yoksa düşük FPS mi?

Bazı "lag" şikâyetleri aslında sunucuyla ilgisizdir. Oyuncunun ekranı takılıyor ama ping düşükse sorun FPS'tir. Bu durumu oyuncuya hızlı kontrol ettirebilirsin:

  • Oyun penceresini tam ekran yerine kenarlıksız pencere modunda denemek.
  • Ekran kartı sürücüsünü güncellemek ve oyunu yönetici olarak çalıştırmak.
  • Yoğun kalabalık alanlarda (pazar, boss) düşen FPS normaldir; çözüm istemci ayarı, sunucu değil.

Teşhis kuralı basittir: ping düşük + ekran takılıyorsa istemci/FPS, ping yüksek veya zıplıyorsa ağ, herkes aynı anda donuyorsa sunucu.

Kalıcı izleme kur

Lagı bir kez çözmek yetmez; tekrar ettiğinde anında görmek gerekir. CPU, RAM ve oyuncu sayısını zaman içinde izleyen basit bir kayıt bile çok şey kazandırır. Hafif bir çözüm olarak Netdata kurabilir ya da bir cron işiyle dakikalık ölçüm alabilirsin:

* * * * * uptime >> /var/log/load.log
# yük ortalaması ne zaman zirve yapıyor? oyuncu yoğunluğuyla örtüşüyor mu?

Bu veri, "akşam 21:00'de herkes laglıyor" gibi belirsiz şikâyetleri ölçülebilir bir desene dönüştürür ve gerçek darboğazı bulmanı sağlar.

Sık Sorulan Sorular

Pingim düşük ama oyun yine de takılıyor, neden?

Düşük ping ağ yolunun hızlı olduğunu gösterir ama sunucunun komutları zamanında işlediğini garanti etmez. Tek çekirdekte %100 CPU veya yavaş veritabanı sorguları, ping düşükken bile oyunu "ağır" hissettirir. htop ve slow query log ile sunucu tarafını kontrol et.

Sunucumu daha yakın bir lokasyona taşımak şart mı?

Oyuncuların büyük çoğunluğu sunucuya coğrafi olarak uzaksa, evet — fiziksel mesafeden gelen gecikmeyi hiçbir yazılım ayarı tamamen ortadan kaldıramaz. Önce mtr ile gerçek pingi ölç; sürekli yüksekse daha yakın bir veri merkezi en kesin çözümdür.

Anlık lag dalgaları (spike) neden olur?

En sık sebepler: conntrack tablosunun dolması, periyodik ağır bir cron/yedekleme işi, ya da belirli saatlerde tetiklenen kalabalık etkinlikler. Lag zamanını yük logundaki zirveyle eşleştirerek tetikleyiciyi bulabilirsin.

Sunucundaki lagın kaynağını bulamıyor musun? Ağ, çekirdek ve veritabanı tarafını birlikte teşhis edip kalıcı performans ayarı çıkarmana yardımcı olabilirim — benimle iletişime geç.

Bu kategorideki tüm yazılar →

Devamı için