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 | İdeal | Kabul Edilebilir | Sorunlu |
|---|---|---|---|
| TPS | 20.0 | 18-20 | <15 |
| MSPT (ms/tick) | <30ms | 30-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:
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 --noguiFlag Açıklamaları
| Flag | Değer | Açıklama |
|---|---|---|
| <code>-Xms/-Xmx</code> | 8G | Min/max heap boyutu (eşit olmalı) |
| <code>-XX:+UseG1GC</code> | — | G1 garbage collector kullan |
| <code>-XX:MaxGCPauseMillis</code> | 200 | Hedef GC duraklama süresi (ms) |
| <code>-XX:+AlwaysPreTouch</code> | — | Başlangıçta tüm RAM'i ayır |
| <code>-XX:G1NewSizePercent</code> | 30 | Young gen min boyutu (%) |
| <code>-XX:G1MaxNewSizePercent</code> | 40 | Young gen max boyutu (%) |
| <code>-XX:G1HeapRegionSize</code> | 8M | Heap bölge boyutu (12GB+ için 16M) |
| <code>-XX:G1ReservePercent</code> | 20 | Acil durum için ayrılan heap (%) |
| <code>-XX:MaxTenuringThreshold</code> | 1 | Objeleri 1 GC sonra old gen'e taşı |
| <code>-XX:SurvivorRatio</code> | 32 | Survivor space oranı |
RAM Önerileri
| Oyuncu Sayısı | Önerilen RAM | Not |
|---|---|---|
| 1-10 | 2-4 GB | Vanilla veya az plugin |
| 10-30 | 4-6 GB | Orta düzey plugin |
| 30-60 | 6-10 GB | Çok plugin + dünya |
| 60-100 | 10-14 GB | Yoğun sunucu |
| 100+ | 16+ GB | Dedicated sunucu gerekli |
server.properties
Sunucunun temel yapılandırma dosyası. Performans için kritik ayarlar:
| Ayar | Varsayılan | Önerilen | Açıklama |
|---|---|---|---|
| <code>view-distance</code> | 10 | 6-7 | Oyuncuya gönderilen chunk mesafesi |
| <code>simulation-distance</code> | 10 | 4-5 | Aktif olarak işlenen chunk mesafesi |
| <code>network-compression-threshold</code> | 256 | 256 | Paket sıkıştırma eşiği (byte) |
| <code>max-tick-time</code> | 60000 | 60000 | Watchdog timeout (ms) |
| <code>spawn-protection</code> | 16 | 16 | Spawn koruma yarıçapı |
paper-global.yml
Chunk Yükleme
chunk-loading-basic:
autoconfig-send-distance: true
player-max-concurrent-chunk-generates: 0
player-max-concurrent-chunk-loads: 0Paket Limiter
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.0Collision
collisions:
enable-player-collisions: false # CPU tasarrufu
send-full-pos-for-entity-teleport: truepaper-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ı:
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 32
flying-monsters: 32Despawn Ayarları
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: 48Spawn Limitleri
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: 1Merge Radius
merge-radius:
item: 3.5 # Yerdeki itemleri birleştir
exp: 4.0 # XP orblarını birleştirHopper Optimizasyonu
hopper:
cooldown-when-full: true
disable-move-event: false
ignore-occluding-blocks: falseRedstone
# Alternate Current redstone implementasyonu vanilla'dan çok daha hızlı
redstone-implementation: ALTERNATE_CURRENTDiğer Önemli Ayarlar
| Ayar | Önerilen | Açıklama |
|---|---|---|
| <code>per-player-mob-spawns</code> | true | Oyuncu başına mob spawni (daha adil) |
| <code>max-entity-collisions</code> | 4 | Maks entity çarpışması |
| <code>disable-treasure-maps</code> | true | Hazine haritası aramayı kapat (lag yapar) |
| <code>update-pathfinding-on-block-update</code> | false | Blok değişikliğinde pathfinding güncelleme |
| <code>fix-climbing-bypassing-cramming-rule</code> | true | Tırmanma exploit düzeltmesi |
| <code>armor-stands.tick</code> | false | Zırh standı tick'ini kapat |
spigot.yml
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: falsebukkit.yml
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: 6000Pre-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
/chunky radius 5000
/chunky start
/chunky pause # Durdurmak için
/chunky continue # Devam ettirmek için5000 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ı
/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
| Komut | Açı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 | İşlev | Not |
|---|---|---|
| <strong>Spark</strong> | TPS/RAM izleme, profiler | Zorunlu — her sunucuda olmalı |
| <strong>Chunky</strong> | Dünya pre-generation | Kurulum sonrası çalıştır |
| <strong>ViewDistanceTweaks</strong> | Dinamik view distance | Oyuncu sayısına göre otomatik ayar |
| <strong>ClearLagg</strong> | Item/entity temizleme | Konfigüre edilmeli, agresif kullanmayın |
| <strong>FarmControl</strong> | Farm limitleri | Mob farm abuse'u önler |
| <strong>VillagerOptimiser</strong> | Villager AI optimize | Villager lagını çözer |
| <strong>EntityTrackerFixer</strong> | Entity tracking düzeltme | Bü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-5ayarlandı - ☐
view-distance: 6-7ayarlandı - ☐ Spawn limitleri düşürüldü (monsters: 30, animals: 8)
- ☐
per-player-mob-spawns: trueaçı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ı