TPS ve Tick Loop

Minecraft sunucusu saniyede tam 20 tick işler. Her tick 50 milisaniye içinde tamamlanmalıdır. Tick süresi 50ms'yi aşarsa sunucu yavaşlar - buna lag denir.

MetrikİdealKabul EdilebilirSorunlu
TPS20.018-20<15
MSPT (ms/tick)<30ms30-50ms>50ms
Spark sleep %>80%20-80%<5%

Tick döngüsünde sırasıyla işlenen: oyuncu hareketi, entity AI, redstone, blok tikleri, chunk yükleme, ağ paketleri. Herhangi birinde darboğaz = TPS düşüşü.

JVM Flags (Başlatma Parametreleri)

JVM flags sunucunun Java sanal makinesini nasıl kullanacağını belirler. Doğru flags ile GC (Garbage Collection) duraklamaları minimize edilir.

Aikar's Flags (Standart)

Minecraft sunucuları için altın standart. Çoğu sunucu için önerilen:

bash
java -Xms8G -Xmx8G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1MixedGCLiveThresholdPercent=90 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -jar paper.jar --nogui

Flag Açıklamaları

FlagDeğerAçıklama
-Xms/-Xmx8GMin/max heap boyutu (eşit olmalı)
-XX:+UseG1GC-G1 garbage collector kullan
-XX:MaxGCPauseMillis200Hedef GC duraklama süresi (ms)
-XX:+AlwaysPreTouch-Başlangıçta tüm RAM'i ayır
-XX:G1NewSizePercent30Young gen min boyutu (%)
-XX:G1MaxNewSizePercent40Young gen max boyutu (%)
-XX:G1HeapRegionSize8MHeap bölge boyutu (12GB+ için 16M)
-XX:G1ReservePercent20Acil durum için ayrılan heap (%)
-XX:MaxTenuringThreshold1Objeleri 1 GC sonra old gen'e taşı
-XX:SurvivorRatio32Survivor space oranı

RAM Önerileri

Oyuncu SayısıÖnerilen RAMNot
1-102-4 GBVanilla veya az plugin
10-304-6 GBOrta düzey plugin
30-606-10 GBÇok plugin + dünya
60-10010-14 GBYoğun sunucu
100+16+ GBDedicated sunucu gerekli

server.properties

Sunucunun temel yapılandırma dosyası. Performans için kritik ayarlar:

AyarVarsayılanÖnerilenAçıklama
view-distance106-7Oyuncuya gönderilen chunk mesafesi
simulation-distance104-5Aktif olarak işlenen chunk mesafesi
network-compression-threshold256256Paket sıkıştırma eşiği (byte)
max-tick-time6000060000Watchdog timeout (ms)
spawn-protection1616Spawn koruma yarıçapı

paper-global.yml

Chunk Yükleme

yaml
chunk-loading-basic:
  autoconfig-send-distance: true
  player-max-concurrent-chunk-generates: 0
  player-max-concurrent-chunk-loads: 0

Paket Limiter

yaml
packet-limiter:
  all-packets:
    action: KICK
    interval: 7.0
    max-packet-rate: 500.0
  overrides:
    ServerboundPlaceRecipePacket:
      action: DROP
      interval: 4.0
      max-packet-rate: 5.0

Collision

yaml
collisions:
  enable-player-collisions: false  # CPU tasarrufu
  send-full-pos-for-entity-teleport: true

paper-world.yml (Dünya Ayarları)

En çok performans etkisi olan ayarlar burada. Her dünya için ayrı yapılandırılabilir.

Entity Activation Range

Entity'lerin AI işlemesinin yapıldığı mesafe. Düşük = daha az CPU kullanımı:

yaml
entity-activation-range:
  animals: 16
  monsters: 24
  raiders: 48
  misc: 8
  water: 8
  villagers: 32
  flying-monsters: 32

Despawn Ayarları

yaml
despawn-ranges:
  monster:
    soft: 30    # Bu mesafede rastgele despawn şansı
    hard: 56    # Bu mesafede anında despawn
  creature:
    soft: 30
    hard: 56
  misc:
    soft: 28
    hard: 48

Spawn Limitleri

yaml
spawn-limits:
  monsters: 30      # Varsayılan 70 - yarıya düşür
  animals: 8
  water-animals: 3
  water-ambient: 3
  water-underground-creature: 3
  axolotls: 3
  ambient: 1

Merge Radius

yaml
merge-radius:
  item: 3.5       # Yerdeki itemleri birleştir
  exp: 4.0        # XP orblarını birleştir

Hopper Optimizasyonu

yaml
hopper:
  cooldown-when-full: true
  disable-move-event: false
  ignore-occluding-blocks: false

Redstone

yaml
# Alternate Current redstone implementasyonu vanilla'dan çok daha hızlı
redstone-implementation: ALTERNATE_CURRENT

Diğer Önemli Ayarlar

AyarÖnerilenAçıklama
per-player-mob-spawnstrueOyuncu başına mob spawni (daha adil)
max-entity-collisions4Maks entity çarpışması
disable-treasure-mapstrueHazine haritası aramayı kapat (lag yapar)
update-pathfinding-on-block-updatefalseBlok değişikliğinde pathfinding güncelleme
fix-climbing-bypassing-cramming-ruletrueTırmanma exploit düzeltmesi
armor-stands.tickfalseZırh standı tick'ini kapat

spigot.yml

yaml
world-settings:
  default:
    entity-activation-range:
      animals: 16
      monsters: 24
      raiders: 48
      misc: 8
      water: 8
      tick-inactive-villagers: true
    merge-radius:
      item: 4.0
      exp: 6.0
    mob-spawn-range: 4
    item-despawn-rate: 6000
    arrow-despawn-rate: 300
    nerf-spawner-mobs: false

bukkit.yml

yaml
spawn-limits:
  monsters: 30
  animals: 8
  water-animals: 3
  water-ambient: 3
  water-underground-creature: 3
  axolotls: 3
  ambient: 1

chunk-gc:
  period-in-ticks: 400

ticks-per:
  animal-spawns: 400
  monster-spawns: 4
  water-spawns: 1
  water-ambient-spawns: 1
  water-underground-creature-spawns: 1
  axolotl-spawns: 1
  ambient-spawns: 1
  autosave: 6000

Pre-Generation (Dünya Önceden Oluşturma)

Chunk generation en çok CPU harcayan işlemdir. Dünyayı önceden oluşturmak runtime'da bu yükü ortadan kaldırır.

Chunky Plugin

text
/chunky radius 5000
/chunky start
/chunky pause       # Durdurmak için
/chunky continue    # Devam ettirmek için

5000 blok radius = ~10.000x10.000 alan. Bu işlem uzun sürebilir (30dk - birkaç saat). Sunucu boşken çalıştırın.

Dünya Sınırı

text
/worldborder set 10000    # 10.000 blok çap
/worldborder center 0 0   # Merkez noktası

Spark ile Performans Analizi

Spark, Minecraft sunucuları için en gelişmiş profiling aracıdır. TPS düşüşünün nedenini bulmak için kullanılır.

Kurulum ve Temel Komutlar

KomutAçıklama
/spark profiler startCPU profiling başlat
/spark profiler stopProfiling durdur ve rapor oluştur
/spark tpsAnlık TPS göster
/spark tickmonitorTick bazlı izleme başlat
/spark healthSunucu sağlık özeti (CPU, RAM, TPS)
/spark gcGarbage collection istatistikleri

Rapor Okuma

  • waitForNextTick() sleep > %80: Sunucu sağlıklı, yedek kapasite var
  • Sleep %20-80: Normal yük altında, izlemeye devam
  • Sleep < %5: Kritik - lag spike'lar kaçınılmaz
  • En çok CPU yiyen thread: Darboğaz burası - entity, redstone veya chunk gen olabilir

Performans Pluginleri

PluginİşlevNot
SparkTPS/RAM izleme, profilerZorunlu - her sunucuda olmalı
ChunkyDünya pre-generationKurulum sonrası çalıştır
ViewDistanceTweaksDinamik view distanceOyuncu sayısına göre otomatik ayar
ClearLaggItem/entity temizlemeKonfigüre edilmeli, agresif kullanmayın
FarmControlFarm limitleriMob farm abuse'u önler
VillagerOptimiserVillager AI optimizeVillager lagını çözer
EntityTrackerFixerEntity tracking düzeltmeBüyük sunucularda etkili

Sık Yapılan Hatalar

  • Xms ≠ Xmx: İkisi eşit olmalı, yoksa runtime'da stutter olur
  • Çok fazla RAM: 16GB+ allocate etmek GC pause'ları uzatır. İhtiyaçtan fazla RAM vermeyin
  • view-distance çok yüksek: Her ek chunk katlanarak CPU kullanır. 6-7 yeterlidir
  • /reload kullanmak: Memory leak ve plugin hatalarına neden olur. Her zaman restart yapın
  • Dünya sınırı koymamak: Oyuncular sonsuz chunk oluşturabilir, disk ve CPU patlar
  • Timings yerine Spark: Timings deprecated, Spark çok daha detaylı ve doğru
  • Hopper farmlarda: Yüzlerce hopper = ciddi lag. Water stream alternatifini kullanın

Optimizasyon Kontrol Listesi

  • ☐ JVM flags (Aikar) ayarlandı
  • ☐ simulation-distance: 4-5 ayarlandı
  • ☐ view-distance: 6-7 ayarlandı
  • ☐ Spawn limitleri düşürüldü (monsters: 30, animals: 8)
  • ☐ per-player-mob-spawns: true açıldı
  • ☐ Entity activation range düşürüldü
  • ☐ redstone-implementation: ALTERNATE_CURRENT
  • ☐ Dünya pre-generate edildi (Chunky)
  • ☐ Dünya sınırı (worldborder) ayarlandı
  • ☐ Spark profiler kuruldu
  • ☐ disable-treasure-maps: true
  • ☐ Hopper cooldown ayarlandı
  • ☐ Player collision kapatıldı