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 ... beginblokları, özellikle döngü ve sıktimerkullananlar CPU'yu boğar. Sürekli tetiklenen quest'leri olay bazlı (event-driven) hale getir. - İndekssiz sorgular:
player,itemgibi 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ç.