Special Tweaks - ItsukaHiro/SimpServer GitHub Wiki

LƯU Ý: Những tweak sau đây "có thể" sẽ giúp cho anh em có hiệu năng tốt hơn về mặt FPS, song hầu hết đều tập trung vào việc ổn định mức FPS hơn, giảm tình trạng giật lag, khựng khung hình. Tuy vậy nếu bạn gặp phải các tình trạng trên thì hãy ưu tiên việc loại bỏ tác nhân gây ra lag, giật trước. Có thể sử dụng Spark / Observable để kiểm tra lý do.


1. Java Arguments.


Java là một ngôn ngữ lập trình bậc cao với khả năng quản lý dữ liệu tự động, tuy vậy không phải cái gì "tự động" cũng có hiệu quả như "thủ công". Vậy nên ở đây tôi sẽ chỉ cho bạn vài trick để có thể giúp Minecraft chạy ổn định hơn (ổn định hơn thôi).

1.1. Garbage Collector - Trình thu gọn rác.

Là một tính năng mặc định của Java - Garbage Collector (viết tắt là GC) có chức năng kiểm tra xem trong bộ nhớ (RAM ấy) có những dữ liệu nào đang và không còn sử dụng, cái nào không còn thì dọn "rác" để lấy chỗ cho những data mới. Và mỗi lần Java tiến hành dọn rác, những gì được chạy bằng Java sẽ "khựng" lại vài ms. Tưởng tưởng nó giống 1 đoàn người đang đi, để có thể xác định chính xác đang có bao nhiều áo đỏ, bao nhiêu người áo xanh (mà không làm thay đổi số lượng gây ra sai số) thì bạn buộc phải dừng mọi người lại. Và uh cái GC cũng hoạt động như vậy thôi. Nó cần phải kiểm tra xem dữ liệu nào đang dùng, dữ liệu nào không còn dùng, và mỗi lần kiểm tra nó sẽ "khựng" lại (thuật ngữ là stop-the-world), cộng với việc loại bỏ chỗ dữ liệu không cần thiết và "dồn hàng" thì tất cả quá trình sẽ tạo ra một khoảng trễ trong quá trình chơi game của của anh em - chính là giật lag.

Tuy vậy không phải tất cả giật lag đều do cái này. Trong đa số trường hợp thì do RAM không đủ / CPU không xử lý kịp. Với những trường hợp đó thì bạn không thể làm gì ngoài tìm ra tác nhân gây lag và loại bỏ nó, hoặc mở ví ra xem còn tờ polime nào không.

You may ask: Vậy tôi nói về thứ cái "trình dọn rác" kia để làm gì?

Answer: Java Arguments là một đoạn mã giúp thay đổi cách hoạt động của Garbage Collector (chính xác là cách khai báo RAM, từ đó ảnh hưởng tới tới GC). Mục đính chính của ta là giảm tần suất của những lần GC phải dọn rác, từ đó giảm số lần "khựng" lại.

Tuy vậy, ta vẫn phải cân bằng nó. Nếu để quả lâu mới dọn 1 lần thì thời gian dọn cho 1 lần sẽ tăng lên, làm tăng thời gian "khựng" hơn.

1.2. Aikar's Arguments

Có một người tên Aikar đã viết ra đoạn mã này, thứ giúp anh em host server Minecraft có thể tối ưu Java hơn, xong không chỉ server, phía client-side (game cài để chơi trên máy bạn ấy), cũng có thể dùng - tôi viết lại chút cho anh em chơi trên máy rồi:

java -Xms4096M -Xmx4096M -XX:PermSize=128M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20

NOTE:

  • Trong trường hợp code sau không chạy, hãy thử bỏ java ở đầu đi.
  • -Xms-Xmx là 2 thông số quyết định xem bạn cấp cho Minecraft dùng bnh RAM (M = MB, G = GB). Như ví dụ trên, tôi setup cho Minecraft dùng tối đa 4096MB = 4GB RAM. LUÔN ĐỂ 2 THÔNG SỐ NÀY BẰNG NHAU.
  • XX:PermSize có thể để 128 / 256 tuỳ trường hợp.
  • Nếu Launcher của bạn có mục setting Memory riêng (tức là setting Minecraft dùng bnh RAM ấy) thì hãy bỏ phần -Xms4096M -Xmx4096M -XX:PermSize=128M đi. Thay vào đó setup Min và Max của setting trên bằng nhau (bằng số RAM bạn muốn Minecraft dùng). Tương tự với PermSize

1.2.1. Official Launcher:

Để sử dụng Java Arguments, hãy vào Installations, click vào profile (ý là instance bạn chơi ấy) và chọn More Options:

image

Tại phần JVM Arguments, hãy nhập dòng bên trên vào, vậy là xong.

1.2.2. MultiMC-fork:

Vào Settings -> Java rồi nhập dòng trên vào ô Arguments:

image

LƯU Ý: Các fork của MultiMC đều có setting thông số RAM riêng, với Maximum chính là -Xmx, Minimum-Xms, và PermGen-XX:PermSize. Vậy nên đối với các Launcher này thì hãy bỏ phần đó đi và nhập số vào ô nhập Memory riêng.

1.2.3. Legacy Launcher:

image

Vào Launcher & Game References, tại mục Java/JRE chọn Configure..., sau đó nhập dòng trên vào Java Arguments.

LƯU Ý: Cũng giống với MultiMC-fork, hãy bỏ các phần -Xmx, -Xms-XX:PermSize đi, thay vào đó là dùng Setting của Legacy Launcher.


2. Large Pages

Windows có một cái khá kì, CPU có bộ nhớ Cache để quản lý giữ liệu rồi, nhưng Windows còn cho phép tạo thêm một Pages file (dung lượng 2MB) để lưu trữ các data liên quan tới Render Hình ảnh. Tận dụng tính năng này, ta có thể khiến có Minecraft tốt hơn 1 chút (MỘT CHÚT THÔI).

Với Windows 10/11 Home: Hãy mở Command Prompt với quyền Admin (Run as Administrator), sau đó nhập dòng lệnh sau:

ntrights -u "account" +r SeLockMemoryPrivilege với việc thay acoount bằng tên account PC của bạn. Có thể kiểm tra tên account bằng cách vào Task Manager và chọn phần Users.

Với Windows 10/11 Pro trở lên: Hãy mở Local Security Policy. Sau đó trong thư mục Local Policies -> User Rights Assignment, hãy chọn Lock Pages in Memory:

image

Tại cửa sổ này, thêm tên account trên PC của bạn vào và Apply.

Bây giờ, sau khi đã làm xong, hãy Restart PC của bạn (Của Home và Pro - từ bức này trở đi là giống nhau.)

Sau khi khởi động lại, hãy truy cập vào thư mục của Java:

  • Nếu bạn cài Java cho Minecraft bằng Temurin / Azul Zulu, hãy tìm vào thư mục Program FilesProgram Files (x86) rồi tìm tới thư mục Java (Với Temurin, nó nằm trong thư mục Eclipse Adoptium).
  • Nếu bạn cài Java bằng file.zip, hãy mở thư mục Java mà trước đây bạn đã giải nén.

Lúc này:

  • Tìm tới file java.exejavaw.exe.
  • Right-Click -> Properties
  • Mục Compatinility -> Tích chữ "v" Run as Administrator.

Ngoài ra bạn cũng phải làm điểu tương tự với Launcher của bạn (cũng Right-Click ->...).

Cuối dùng, thêm 2 đoạn mã sau vào đằng sau JVM Arguments của Launcher:

-XX:+UseLargePages -XX:LargePageSizeInBytes=2m

Vậy là xong.