Setting RAM dan Aikar's Flags untuk Server Minecraft (JVM Tuning)
Lebih banyak RAM tidak membuat server Minecraft lebih kencang, tapi RAM yang salah setel bisa memicu lag lewat garbage collection. Panduan setting RAM: berapa yang benar-benar dibutuhkan, kenapa -Xms harus sama dengan -Xmx, Aikar's flags untuk G1GC, dan kapan beralih ke Generational ZGC di Java 21.
Daftar isi
RAM adalah setelan yang paling sering disalahpahami pemilik server. Seperti dijelaskan di panduan utama mengatasi lag, menambah RAM tidak membuat server lebih kencang, karena performa ditentukan CPU. Tapi ada sisi lain yang jarang dibahas: RAM yang salah disetel justru bisa menciptakan lag, lewat sesuatu bernama garbage collection.
Panduan ini bagian dari seri optimasi server, dan fokus pada tiga hal: berapa RAM yang benar-benar kamu butuhkan, cara mengaturnya dengan benar, dan flags JVM yang membuat garbage collection mulus.
Berapa RAM yang sebenarnya dibutuhkan
Lebih sedikit dari yang dijual hosting kepadamu. Patokan resmi dari tim Paper: gunakan setidaknya 6 sampai 10 GB, berapa pun jumlah pemainnya. Untuk mayoritas server, 10 GB sudah lebih dari cukup.
Yang lebih penting daripada angka besar adalah satu aturan: jangan alokasikan seluruh RAM sistem ke server. Java dan sistem operasi butuh memori tambahan di luar heap. Kalau kamu beri semuanya ke -Xmx, server berisiko kehabisan memori dan dimatikan paksa oleh sistem (OOMKiller).
Sisakan sekitar 1000 sampai 1500 MB untuk sistem. Contoh: di mesin dengan 8 GB, alokasikan sekitar 6500 MB ke server, bukan 8 GB penuh.
Set -Xms sama dengan -Xmx
-Xms adalah ukuran heap awal, -Xmx adalah ukuran maksimal. Untuk server Minecraft modern dengan G1GC, setel keduanya sama persis.
-Xms10G -Xmx10GAlasannya: kalau -Xms lebih kecil dari -Xmx, JVM akan terus membesar dan mengecilkan heap, dan proses penyesuaian itu membuang kerja. Dengan menyamakannya (dipadu flag -XX:+AlwaysPreTouch), heap dialokasikan penuh sejak start dan stabil. G1GC modern justru bekerja lebih efisien dengan heap besar yang tetap.
Aikar's flags untuk G1GC
Inilah set flag standar industri untuk server Minecraft, dikenal sebagai Aikar's flags. Flag ini menyetel garbage collector G1GC agar jeda-nya pendek dan teratur, sehingga lag spike akibat GC nyaris hilang. Pakai apa adanya, hanya ganti angka -Xms dan -Xmx sesuai alokasimu:
java -Xms10G -Xmx10G -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 server.jar --noguiTidak perlu menghafalnya. Cara termudah adalah memakai Start Script Generator di flags.sh: pilih jumlah RAM, dan ia menghasilkan skrip lengkap untukmu, termasuk penyesuaian kecil yang dibutuhkan kalau heap-mu di atas 12 GB.
Java 21 ke atas: pertimbangkan Generational ZGC
Sejak Java 21, ada alternatif baru bernama Generational ZGC. Garbage collector ini dirancang adaptif: ia menyesuaikan diri dengan beban secara otomatis dan butuh sangat sedikit setelan manual. Untuk sebagian server, terutama yang heap-nya besar (8 GB ke atas), ZGC bisa memangkas lag spike GC lebih jauh lagi.
Tapi ada satu jebakan penting: jangan mencampur Aikar's flags dengan ZGC. Banyak flag G1GC seperti -XX:G1NewSizePercent tidak berlaku atau bahkan merugikan di ZGC. Jadi pilih salah satu jalur:
- Mau pakai Aikar's flags? Tetap di G1GC. Ini pilihan paling aman dan teruji untuk mayoritas server.
- Mau coba Generational ZGC? Pakai konfigurasi flag yang khusus untuk ZGC, jangan menempelkan flag G1GC ke atasnya. Pastikan kamu memakai Java 21 atau lebih baru.
Kalau ragu, mulai dari Aikar's flags dengan G1GC. Itu titik aman.
Pantau GC, bukan persen RAM
Ini menyambung mitos dari panduan utama: angka penggunaan RAM di panel atau htop bukan ukuran yang berguna. JVM memang sengaja mengisi heap sampai hampir penuh sebelum membersihkannya, jadi "RAM 90% terpakai" itu normal, bukan tanda bahaya.
Yang sebenarnya menentukan kelancaran adalah garbage collection: seberapa sering ia berjalan dan seberapa lama tiap jeda. GC yang sehat berjalan sering dengan jeda pendek (heap naik lalu dibersihkan berulang). GC yang buruk membiarkan heap penuh sampai mentok, lalu melakukan pembersihan besar yang membekukan server sesaat. Pembekuan itulah yang dirasakan pemain sebagai lag spike.
Gunakan /spark health --memory atau laporan profiler Spark untuk melihat perilaku GC, bukan sekadar persentase RAM.
Langkah selanjutnya
Ringkasnya: beri server 6 sampai 10 GB (jangan seluruh RAM sistem), samakan -Xms dengan -Xmx, pakai Aikar's flags dengan G1GC (atau Generational ZGC tanpa flag G1 kalau di Java 21), lalu pantau GC, bukan persen RAM.
Ingat, RAM dan flags hanya membereskan jeda GC. Beban tick yang sebenarnya tetap ada di CPU. Kembali ke panduan utama mengatasi lag untuk menyetel hal-hal yang benar-benar menurunkan beban, seperti view-distance dan entity.
Setelah server stabil, daftarkan servermu di MSID supaya pemain Indonesia menemukannya di daftar server Minecraft Indonesia.
Selamat menyetel!