Cách chọn VPS chạy game server ổn định
Chọn VPS chạy game server dựa trên tốc độ single core và RAM, không chỉ số vCPU. Xem cách tính cấu hình, mở port, systemd tự restart, backup và chọn location để giảm latency.
Bạn đang nói đến loại gaming VPS nào?
VPS cho game server phù hợp với một việc: chạy dedicated server để bạn và bạn bè kết nối từ máy của mình. VPS không phù hợp với việc còn lại mà nhiều người muốn nói khi dùng cụm từ này: chơi game trực tiếp trên VPS thông qua remote desktop. Hai việc này cần phần cứng gần như trái ngược nhau. Dedicated server cần một CPU core nhanh và đủ RAM để chứa world. Chơi game cần GPU (graphics processing unit), trong khi gói VPS tiêu chuẩn không có GPU.
Toàn bộ phần bên dưới nói về việc đầu tiên. Việc thứ hai vẫn đáng để bạn dành 2 phút tìm hiểu, vì nhiều người mua nhầm loại máy cho nhu cầu đó.
Vì sao bạn không thể chơi game trên VPS
VPS thông thường cung cấp các lõi CPU ảo nhưng không có card đồ họa. Không có thiết bị nào từ máy chủ vật lý được passthrough, nên game không có hardware renderer để sử dụng. Bạn có thể kiểm tra phần cứng thực tế được cấp:
sudo apt install -y pciutils
lspci | grep -iE "vga|3d"Kết quả là một display adapter ảo, chẳng hạn như thiết bị Cirrus Logic hoặc virtio GPU. Thiết bị này tồn tại để web console của nhà cung cấp hiển thị màn hình cho bạn và không có 3D acceleration phía sau. Nếu cài desktop và VNC server trên đó, glxinfo -B sẽ báo renderer là llvmpipe. Đây là software renderer của Mesa chạy trên CPU. Game 3D hiện đại được CPU render chỉ chạy vài frames mỗi giây, nên không thể chơi được ngay cả trước khi dữ liệu rời khỏi máy. Windows instance cũng gặp giới hạn tương tự theo hướng ngược lại. Nhiều game thoát ngay khi khởi động và báo không thể tạo Direct3D device, vì không có display adapter để tạo device đó.
Vấn đề thứ hai là chặng đường dữ liệu quay về máy bạn. Chơi trên một máy từ xa nghĩa là mọi frame đều được mã hóa thành video, gửi qua Internet rồi giải mã trên màn hình của bạn. Việc này cộng thêm thời gian encode và decode vào input lag của game. RDP và VNC cũng được thiết kế cho desktop, không phải cho chuyển động ở 60 frames mỗi giây. Dịch vụ cloud gaming giải quyết vấn đề này bằng GPU thật và streaming protocol chuyên dụng. VPS thông thường không có cả hai. Nếu muốn chơi, hãy thuê GPU time. Nếu muốn host game, hãy đọc tiếp.
Máy chủ game chuyên dụng thực sự cần gì
Máy chủ game là một vòng lặp mô phỏng. Nó giữ thế giới trong bộ nhớ và cập nhật thế giới một số lần cố định mỗi giây. Sau đó, máy chủ gửi cho từng người chơi đã kết nối phần thế giới mà họ có thể nhìn thấy.
Mô hình đó quyết định phần cứng. Vòng lặp chủ yếu chạy trên một thread, nên tốc độ của từng core quan trọng hơn số lượng core. Thế giới nằm trong bộ nhớ, nên RAM thường là giới hạn đầu tiên bạn gặp. Disk ít hoạt động khi đang chơi và bận khi load hoặc save. Tuyến mạng của bạn quyết định ping; không có gói dịch vụ nào thay đổi được điều đó.
Tốc độ đơn nhân quan trọng hơn số lượng core
Hầu hết game server tiến hành cập nhật thế giới trên một main thread. Vòng lặp tick của Minecraft và server frame của Source engine đều hoạt động theo cách này. Mỗi tick có một deadline. Minecraft Java chạy ở 20 tick mỗi giây, nên mỗi tick có ngân sách 50 milliseconds. Khi không xử lý kịp trong khoảng thời gian đó, server in chính xác dòng sau:
[12:04:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2547ms or 50 ticks behindDòng này có nghĩa là một thread đã hết thời gian. Thêm core không giúp thread đó có thêm thời gian. Một plan có 2 vCPU nhanh sẽ giữ được tick rate mà một plan có 8 vCPU chậm không giữ được, vì chỉ một trong 8 vCPU đó thực hiện phần việc quan trọng.
Hãy đo tốc độ đơn luồng trước khi quyết định:
sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runĐọc dòng events per second. Con số này không có nhiều ý nghĩa khi đứng một mình, nhưng rất hữu ích để so sánh. Vì vậy, hãy chạy benchmark trên 2 plan ứng viên và đặt kết quả cạnh nhau. Bài benchmark VPS đầy đủ cũng kiểm tra disk và network theo cách tương tự.
Các core bổ sung vẫn có ích. Chúng chạy game server thứ hai, database, bản backup hằng đêm và trình pre-generator chunk mà không lấy thời gian của tick thread. Phần mềm server cũng ngày càng biết cách phân bổ công việc, và Paper, một fork Minecraft server phổ biến, chuyển một phần công việc ra khỏi main tick thread. Vì vậy, nên chọn vài core nhanh thay vì nhiều core chậm.
Có một con số không bao giờ xuất hiện trên trang giới thiệu plan, nhưng nó quyết định liệu core nhanh bạn trả tiền có thực sự dành cho bạn hay không:
vmstat 1 5Cột st là tỷ lệ phần trăm thời gian vCPU của bạn ở trạng thái sẵn sàng chạy nhưng physical host lại giao core đó cho người khác. Giá trị st duy trì trên vài phần trăm có nghĩa là host đang oversell. Người chơi sẽ cảm nhận điều đó dưới dạng giật lag, trong khi top trên máy của bạn vẫn cho thấy CPU đang idle, vì khoảng thời gian idle đó không thuộc về bạn để sử dụng.
Máy chủ game cần bao nhiêu RAM?
The data behind this chart
[
{
"label": "Minecraft Java, vanilla",
"players": 10,
"ram_gb": 2
},
{
"label": "Minecraft Java, large modpack",
"players": 10,
"ram_gb": 8
},
{
"label": "Valheim",
"players": 10,
"ram_gb": 4
},
{
"label": "Palworld",
"players": 32,
"ram_gb": 16
}
]Đây là các mức cấp phát ban đầu được tài liệu của game và modpack công bố tính đến tháng 8 năm 2026. Đây là mức tham khảo, không phải số đo trên một máy cụ thể. Minecraft Java vanilla chạy ổn với 2 GB heap cho khoảng 10 người chơi. Cùng số người chơi đó trên một modpack lớn cần 8 GB, vì các mod thêm entity và cấu trúc được sinh ra, tất cả đều nằm trong heap đó. Mức tối thiểu được Valheim công bố là 2 GB, còn các operator có world nhỏ cho biết process thường ổn định ở gần 3 GB, nên 4 GB là mức hợp lý để bắt đầu. Palworld là trường hợp khác biệt với 16 GB cho tối đa 32 người chơi, theo khuyến nghị của Pocketpair.
RAM không tăng theo số kết nối. RAM tăng theo world đang được load. Mỗi người chơi giữ region xung quanh họ ở trạng thái loaded, nên hai người chơi đứng cùng một chỗ tốn ít RAM hơn nhiều so với hai người chơi khám phá hai góc đối diện của map. Vì vậy, “RAM trên mỗi người chơi” chỉ là mức tham khảo sơ bộ, còn “RAM trên mỗi khu vực đang hoạt động” mới là yếu tố quyết định. Một nhóm nhỏ thích khám phá có thể vượt quá gói được tính cho số người chơi gấp đôi họ.
Server Java cần thêm hai quy tắc. Đặt heap tối thiểu và tối đa bằng nhau để JVM không phải tạm dừng nhằm resize heap:
java -Xms4G -Xmx4G -jar server.jar noguiSau đó chừa lại một phần headroom. JVM sử dụng memory ngoài heap đã cấp cho thread stack và native buffer, còn kernel cần page cache để đọc các file world nhanh hơn. Trên máy 6 GB, heap 4 GB là hợp lý, còn heap 6 GB thì không.
Hai lỗi thiếu memory này có biểu hiện hoàn toàn khác nhau, nên hãy ghi nhớ cả hai chuỗi lỗi. Heap quá nhỏ gây exception bên trong Java, và server thường vẫn cố chạy:
java.lang.OutOfMemoryError: Java heap spaceHeap lớn hơn dung lượng máy khiến toàn bộ process bị kill từ bên ngoài. Console chỉ ghi Killed, còn bằng chứng nằm trong kernel log:
sudo dmesg -T | grep -i "out of memory"Thêm swap sẽ ngăn việc bị kill nhưng không sửa được nguyên nhân. Tick loop phải đọc world từ swap sẽ trễ mọi deadline, vì vậy người chơi nhận được một server bị đóng băng thay vì bị crash.
Lưu ý về version, cập nhật đến tháng 8 năm 2026: Minecraft Java 1.20.5 trở lên yêu cầu Java 21. Runtime cũ vẫn khởi động rồi sau đó fail với lỗi unsupported class file version. Lỗi này trông giống thông báo của compiler và thường khiến mọi người bối rối khi gặp lần đầu.
sudo apt install -y openjdk-21-jre-headless
java -versionTốc độ ổ đĩa có quan trọng với game server không?
Trong lúc chơi, mức độ quan trọng thấp hơn nhiều người nghĩ, nhưng ở 2 thời điểm cụ thể thì lại rất đáng kể. World được đọc vào bộ nhớ khi khởi động và được ghi trở lại khi autosave, nên tốc độ ổ đĩa thể hiện qua thời gian boot lâu và khoảng tạm dừng khi quá trình save chạy. Trong thời gian còn lại, phần lớn thao tác đọc được phục vụ từ RAM.
Có 2 yếu tố khiến ổ đĩa quan trọng hơn so với nhận định trên. Khi người chơi di chuyển, quá trình khám phá sẽ tải các chunk hoặc zone mới từ ổ đĩa, và thao tác đọc này diễn ra trong tick budget. Autosave trên world lớn sẽ ghi nhiều dữ liệu cùng lúc; trên volume chậm, thao tác ghi có thể block loop đủ lâu để in ra cảnh báo "Can't keep up" ở trên. Cả 2 đều là vấn đề về latency, không phải throughput. Vì vậy, khoảng cách giữa NVMe và SATA SSD trên VPS có ý nghĩa ở đây lớn hơn so với con số megabyte mỗi giây được quảng bá. Điều bạn cần quan tâm là một thao tác nhỏ mất bao lâu.
Hãy chọn dung lượng volume có tính đến mức tăng trưởng. World tăng kích thước mỗi khi có người đi đến một khu vực mới, còn backup sẽ nhân lên theo dung lượng đó. Chạy du -sh world mỗi tuần trong 1 tháng, bạn sẽ biết tốc độ tăng trưởng thực tế của mình.
Tần suất tick, ping và sự khác nhau giữa chúng
Tần suất tick là số lần mỗi giây server tính toán lại thế giới. Minecraft Java chạy ở mức 20. Các server dùng Source engine thường chạy ở mức 64. Trong Minecraft, bạn không thể mua tần suất cao hơn vì đây là một phần trong thiết kế của game. Mục tiêu là giữ ổn định ở mức 20, không phải vượt qua mức đó.
Ping là thời gian khứ hồi giữa một người chơi và server. Hai vấn đề này gây ra các triệu chứng khác nhau, vì vậy hãy phân biệt chúng trước khi chi tiền. Khi server bị hụt tick, tất cả người chơi đều bị rubber-band cùng lúc và server log cũng ghi rõ điều đó. Khi một người chơi có đường truyền mạng dài hoặc kém, chỉ người đó bị lag còn những người khác vẫn bình thường. CPU mạnh hơn sẽ không bao giờ khắc phục được trường hợp thứ hai.
Độ trễ phụ thuộc vào vị trí, không phụ thuộc vào hạng gói dịch vụ
Ánh sáng trong cáp quang truyền được khoảng 200 kilômét mỗi mili giây. Một lượt đi-về bao phủ quãng đường hai lần, nên mức sàn là khoảng 1 ms cho mỗi 100 km giữa người chơi và máy chủ. Không nhà cung cấp nào vượt qua được giới hạn này, và nâng cấp gói dịch vụ cũng không thay đổi nó.
The data behind this chart
[
{
"label": "Toronto to New York",
"distance_km": 550,
"rtt_floor_ms": 5.5
},
{
"label": "Dallas to Chicago",
"distance_km": 1290,
"rtt_floor_ms": 12.9
},
{
"label": "Dallas to Los Angeles",
"distance_km": 1990,
"rtt_floor_ms": 19.9
},
{
"label": "New York to London",
"distance_km": 5570,
"rtt_floor_ms": 55.7
},
{
"label": "Los Angeles to Sydney",
"distance_km": 12070,
"rtt_floor_ms": 120.7
}
]Đây là các mức sàn được tính từ khoảng cách cung tròn lớn. Cáp quang thực tế không chạy theo đường thẳng, và mỗi router trên đường truyền đều cộng thêm một chút độ trễ, nên kết quả thực tế tốt thường gần gấp đôi mức sàn. Người chơi ở Toronto kết nối đến máy chủ tại New York, cách 550 km, có mức sàn là 5.5 ms và thường sẽ thấy độ trễ ở khoảng hàng chục mili giây. Tuyến Los Angeles đến Sydney có mức sàn là 120.7 ms, và không thể dùng tiền để giảm con số này.
Vì vậy, hãy đặt máy chủ gần những người chơi trên đó. Nếu nhóm của bạn nằm ở hai bên đại dương, một bên sẽ phải đi qua tuyến đường dài. Cách phân bổ hợp lý thường là chọn region có nhiều người chơi nhất.
Hãy đo tuyến đường thay vì phỏng đoán:
sudo apt install -y mtr-tiny
mtr -rwzc 100 203.0.113.10Đọc dòng cuối cùng trước. Dòng đó là máy chủ, và packet loss cùng độ trễ trên dòng đó là các yếu tố duy nhất quyết định cảm giác khi chơi game. Packet loss xuất hiện ở một hop trung gian nhưng hop cuối không mất gói thì gần như luôn là do router đó rate limiting ICMP. Router ưu tiên thấp hơn cho các phản hồi probe packet, trong khi vẫn chuyển tiếp network traffic bình thường. Yêu cầu mỗi người chơi chạy lệnh này đến máy chủ, vì mỗi người có thể đi qua một tuyến đường khác nhau.
Cách tính mức sàn của lượt đi-về
Ánh sáng trong thủy tinh truyền với tốc độ khoảng hai phần ba tốc độ trong chân không, tương đương gần 200 km mỗi mili giây. Một lượt đi-về bao phủ quãng đường hai lần, nên mức sàn tính bằng mili giây là khoảng cách một chiều tính bằng kilômét chia cho 100. New York đến London dài 5,570 km, và 5570 chia cho 100 bằng 55.7 ms. Mọi giá trị đo được đều cao hơn con số này, vì cáp chạy theo bờ biển và router cần thời gian để xử lý.
Chỉ mở các cổng mà game cần
Game server chỉ cần mở một hoặc hai cổng, không cần mở thêm cổng nào khác. Các giá trị mặc định phổ biến:
- Minecraft Java Edition: TCP 25565
- Minecraft Bedrock Edition: UDP 19132
- Valheim: UDP 2456 và UDP 2457
- Palworld: UDP 8211
- Các game dùng Source engine như Counter-Strike 2: UDP 27015
Hãy kiểm tra tài liệu của chính game đó, vì một số tựa game dùng thêm query port. Valheim là ví dụ rõ nhất: cổng 2456 truyền game traffic, còn cổng 2457 trả lời Steam server query để server xuất hiện trong danh sách trình duyệt. Mở các cổng này trên TCP không có tác dụng, vì Valheim chỉ dùng UDP.
Hãy cho phép SSH trước khi bật firewall, nếu không bạn sẽ tự khóa mình khỏi server:
sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable
sudo ufw status verboseNhiều nhà cung cấp cũng chạy network firewall trong control panel, tách biệt với firewall trên máy chủ. Một cổng mở trong ufw nhưng bị đóng tại đó vẫn từ chối kết nối. Từ bên ngoài, hiện tượng này giống hệt nhau, vì vậy hãy kiểm tra cả hai nơi trước khi bắt đầu sửa các file cấu hình.
Kiểm tra một TCP port từ máy khác rất đơn giản:
sudo apt install -y netcat-openbsd
nc -vz 203.0.113.10 25565Không thể kiểm tra UDP theo cách đó. UDP port bị đóng thường không trả lời, nên một probe không nhận được phản hồi hoàn toàn không cho bạn biết điều gì. Thay vào đó, hãy xác nhận từ phía server và tìm game process đang bind vào cổng mà bạn mong đợi:
sudo ss -lunp | grep 2456Không bao giờ expose RCON, remote console protocol, ra Internet. Theo mặc định, RCON gửi một password duy nhất qua kết nối plaintext trên port 25575. Hãy bind nó vào 127.0.0.1 và truy cập thông qua SSH tunnel. Đồng thời, hãy chạy game server bằng một user riêng không có quyền đặc biệt, để bug trong mod không thể truy cập phần còn lại của máy. Mười phút đầu tiên trên một VPS mới trình bày cách tạo user account và hardening SSH mà phần này giả định bạn đã thực hiện.
Chạy server bằng systemd để tự khởi động lại
Server được khởi chạy thủ công trong một phiên SSH sẽ dừng khi phiên đó đóng, và không tự chạy lại sau khi reboot. systemd giải quyết cả hai vấn đề này. Tạo /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Java server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar server.jar nogui
Restart=on-failure
RestartSec=15
TimeoutStopSec=180
[Install]
WantedBy=multi-user.targetRestart=on-failure khởi động lại server sau khi crash và giữ server ở trạng thái dừng sau khi shutdown bình thường. Đây là hành vi bạn cần. Restart=always sẽ cản trở bạn mỗi khi cố ý dừng server. TimeoutStopSec=180 quan trọng hơn bạn nghĩ. systemctl stop gửi SIGTERM. Vanilla Minecraft server bắt signal đó và lưu world trước khi thoát. Khi hết thời gian chờ, systemd sẽ gửi SIGKILL. Một world lớn có thể mất hơn 90 giây mặc định để ghi xuống disk. Dữ liệu chưa kịp ghi xuống disk khi SIGKILL được gửi sẽ bị mất.
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo journalctl -u minecraft -fLần khởi động thành công sẽ kết thúc bằng một dòng như Done (12.345s)! For help, type "help". Nếu unit liên tục chuyển giữa trạng thái activating và failed, journalctl -u minecraft -n 50 chứa nguyên nhân. Thường đó là path sai trong WorkingDirectory hoặc heap lớn hơn dung lượng RAM của máy.
systemd không cung cấp console tương tác, nên hãy tính đến việc này ngay từ đầu. Dùng RCON trên localhost để gửi command, hoặc chạy server trong một phiên tmux. Đây cũng là cách giữ một phiên Claude Code chạy lâu trên VPS tiếp tục hoạt động giữa các lần đăng nhập.
Các game được phân phối qua Steam cần SteamCMD trước khi thực hiện các bước này. Package Ubuntu là binary 32 bit, nên mới cần dòng architecture. Nếu bỏ qua dòng đó, apt sẽ báo package không có installation candidate:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmdMột số game server tăng mức sử dụng memory càng chạy lâu. Scheduled restart vào giờ ít người dùng là workaround được chấp nhận, không phải cách khắc phục. systemd timer gọi systemctl restart dễ kiểm tra hơn cron entry, vì systemctl list-timers cho biết chính xác thời điểm timer sẽ chạy lần tiếp theo.
Sao lưu world theo lịch
Mọi thứ trên game server đều có thể thay thế, ngoại trừ thư mục world và dữ liệu người chơi. Cài lại game chỉ mất vài phút. Dựng lại những gì nhóm của bạn đã xây có thể mất vài tháng.
Backup an toàn là backup được tạo khi không có tiến trình nào đang ghi dữ liệu. Dừng server trong một phút là cách đơn giản nhất để đảm bảo rằng:
sudo systemctl stop minecraft
sudo tar czf /var/backups/mc-$(date +%F).tgz -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraftNếu không thể tạm dừng server hằng đêm, hãy flush world trước. Trong Minecraft console, save-off tắt autosave, save-all flush ghi toàn bộ dữ liệu còn pending, và save-on bật lại autosave sau khi copy hoàn tất. Copy world khi server đang ghi dở có thể lấy phải một region file mới được ghi một nửa. Bạn sẽ không phát hiện ra lỗi này cho đến khi cần restore.
Luôn giữ ít nhất một bản copy ngoài máy. Backup trên cùng một disk sẽ không tồn tại nếu disk hỏng. Provider snapshot chỉ là tiện ích, không phải backup, vì nó nằm trong cùng account mà bạn có thể mất quyền truy cập. Thiết lập restic backup theo lịch đến storage ngoài máy sẽ xử lý retention và deduplication, để một tháng copy world hằng đêm không làm đầy volume.
Sau đó hãy thử restore một bản. Một backup chưa từng được restore chỉ là phỏng đoán. Extract archive của đêm qua vào một thư mục riêng, trỏ test server vào thư mục đó, rồi xác nhận world load được và các công trình vẫn ở đúng vị trí như trước.
Kiểm tra kỹ trước khi quyết định
Mua một tháng thay vì cả năm, rồi thử nghiệm với người chơi thật trong một buổi tối. Chạy phép đo single-thread sysbench, sau đó yêu cầu mọi người chơi chạy mtr về phía server. Quy trình benchmark VPS đầy đủ hướng dẫn các công cụ này và cho biết kết quả xấu trông như thế nào. Chi phí thực tế của một VPS mỗi tháng giúp bạn kiểm tra xem mình đang trả tiền cho tài nguyên giới hạn server, thay vì tài nguyên được in nổi bật nhất trên trang gói dịch vụ.
Hai bài viết tiếp theo sẽ tiếp tục từ phần này. Xây dựng server Minecraft trên VPS trình bày từng bước toàn bộ nội dung ở trên, áp dụng cho game mà hầu hết mọi người bắt đầu. Danh sách đầy đủ hơn về những gì VPS có thể chạy đáng đọc nếu bạn muốn máy chủ còn làm được việc hữu ích giữa các buổi chơi game.
FAQ
Tôi có thể chơi game trên VPS thay vì mua PC chơi game không?
Không. VPS tiêu chuẩn không có GPU, chỉ có virtual display adapter cho console của nhà cung cấp. Vì vậy, sau khi cài desktop, glxinfo -B báo software renderer llvmpipe và game 3D chỉ chạy được vài frame mỗi giây. Ngay cả khi có GPU gắn vào, remote play vẫn thêm bước mã hóa và giải mã video vào mỗi vòng khứ hồi của frame. RDP và VNC vốn không được thiết kế cho việc đó. VPS phù hợp để host dedicated server mà nhóm của bạn kết nối vào. Nếu muốn chơi game, hãy thuê GPU theo thời gian hoặc dùng cloud gaming service.
Game server cần bao nhiêu CPU core?
Với hầu hết game, 2 core nhanh tốt hơn 8 core chậm. Nguyên nhân là mô phỏng thế giới chạy trên một main thread, và các core bổ sung không thể giúp thread đó đáp ứng deadline 50 ms. So sánh các plan ứng viên bằng sysbench cpu --cpu-max-prime=20000 --threads=1 run và đọc chỉ số events per second. Nên trả thêm tiền cho core bổ sung nếu bạn cũng chạy server thứ hai hoặc database trên cùng máy. Khi đó, các workload này có thể chạy mà không chiếm thời gian của tick thread.
Minecraft server cần bao nhiêu RAM?
Cần khoảng 2 GB heap cho một thế giới vanilla với khoảng 10 người chơi. Với modpack lớn ở cùng số người chơi, cần 8 GB. Đặt -Xms và -Xmx thành cùng một giá trị. Đồng thời để trống 1 GB đến 2 GB RAM của máy cho operating system. JVM sử dụng memory bên ngoài heap, còn kernel cần page cache. Nếu heap lớn hơn lượng RAM của máy, kernel sẽ kill process. Trong dmesg, lỗi này xuất hiện dưới dạng dòng out of memory chứ không phải lỗi Java.
Tại sao người chơi bị lag khi server vẫn còn CPU và RAM trống?
Có 2 nguyên nhân phù hợp với mô tả này. Kiểm tra server log để tìm Can't keep up! Is the server overloaded?. Dòng này có nghĩa là main thread không đáp ứng được tick budget 50 ms trong khi các core khác không hoạt động. Nếu không có dòng đó, vấn đề nằm ở network path. Hãy yêu cầu từng người chơi chạy mtr -rwzc 100 203.0.113.10 đến địa chỉ server của bạn rồi đọc dòng cuối cùng. Đồng thời kiểm tra cột st trong vmstat 1. Steal time cao hơn vài phần trăm có nghĩa là host bị oversold. Vì vậy, phần CPU idle bạn thấy thực tế không sẵn sàng cho bạn sử dụng.
Tôi cần mở những port nào cho game server?
Chỉ cần mở port riêng của game và SSH. Minecraft Java dùng TCP 25565, Minecraft Bedrock dùng UDP 19132, Valheim dùng UDP 2456 và 2457, còn Palworld dùng UDP 8211. Hãy thêm rule cho SSH trước khi chạy ufw enable, nếu không bạn sẽ mất quyền truy cập vào máy. Lưu ý rằng nhiều nhà cung cấp chạy thêm một firewall trong control panel. Port phải được mở trên cả 2 firewall. Không bao giờ mở RCON trên port 25575 ra Internet, vì mật khẩu được gửi dưới dạng plaintext.