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
<code>-Xms/-Xmx</code>8GMin/max heap boyutu (eşit olmalı)
<code>-XX:+UseG1GC</code>G1 garbage collector kullan
<code>-XX:MaxGCPauseMillis</code>200Hedef GC duraklama süresi (ms)
<code>-XX:+AlwaysPreTouch</code>Başlangıçta tüm RAM'i ayır
<code>-XX:G1NewSizePercent</code>30Young gen min boyutu (%)
<code>-XX:G1MaxNewSizePercent</code>40Young gen max boyutu (%)
<code>-XX:G1HeapRegionSize</code>8MHeap bölge boyutu (12GB+ için 16M)
<code>-XX:G1ReservePercent</code>20Acil durum için ayrılan heap (%)
<code>-XX:MaxTenuringThreshold</code>1Objeleri 1 GC sonra old gen'e taşı
<code>-XX:SurvivorRatio</code>32Survivor 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
<code>view-distance</code>106-7Oyuncuya gönderilen chunk mesafesi
<code>simulation-distance</code>104-5Aktif olarak işlenen chunk mesafesi
<code>network-compression-threshold</code>256256Paket sıkıştırma eşiği (byte)
<code>max-tick-time</code>6000060000Watchdog timeout (ms)
<code>spawn-protection</code>1616Spawn 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
<code>per-player-mob-spawns</code>trueOyuncu başına mob spawni (daha adil)
<code>max-entity-collisions</code>4Maks entity çarpışması
<code>disable-treasure-maps</code>trueHazine haritası aramayı kapat (lag yapar)
<code>update-pathfinding-on-block-update</code>falseBlok değişikliğinde pathfinding güncelleme
<code>fix-climbing-bypassing-cramming-rule</code>trueTırmanma exploit düzeltmesi
<code>armor-stands.tick</code>falseZı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
<code>/spark profiler start</code>CPU profiling başlat
<code>/spark profiler stop</code>Profiling durdur ve rapor oluştur
<code>/spark tps</code>Anlık TPS göster
<code>/spark tickmonitor</code>Tick bazlı izleme başlat
<code>/spark health</code>Sunucu sağlık özeti (CPU, RAM, TPS)
<code>/spark gc</code>Garbage 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
<strong>Spark</strong>TPS/RAM izleme, profilerZorunlu — her sunucuda olmalı
<strong>Chunky</strong>Dünya pre-generationKurulum sonrası çalıştır
<strong>ViewDistanceTweaks</strong>Dinamik view distanceOyuncu sayısına göre otomatik ayar
<strong>ClearLagg</strong>Item/entity temizlemeKonfigüre edilmeli, agresif kullanmayın
<strong>FarmControl</strong>Farm limitleriMob farm abuse'u önler
<strong>VillagerOptimiser</strong>Villager AI optimizeVillager lagını çözer
<strong>EntityTrackerFixer</strong>Entity 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ı