SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor

Cách chọn VPS chạy game server tối ưu nhất

Hướng dẫn chọn VPS cho game server tập trung vào tốc độ đơn nhân và RAM. Tìm hiểu lý do tại sao latency phụ thuộc vào vị trí, cách cấu hình systemd và quản lý port hiệu quả.

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 behind

Dò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 5

Cộ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?

Biểu đồCommon starting RAM per game server (published guidance, not a measurement)
Dữ liệu đằng sau biểu đồ này
[
  {
    "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
  }
]

Đó là mức cấp phát khởi điểm đượ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 đó với một modpack lớn cần 8 GB, vì các mod thêm entity và cấu trúc được generate, tất cả đều nằm trong heap đó. Mức tối thiểu được Valheim công bố là 2 GB, nhưng các operator có world nhỏ cho biết process thường ổn định ở gần 3 GB, vì vậy 4 GB là mức khởi đầu hợp lý. Palworld là trường hợp ngoại lệ 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ố connection. RAM tăng theo phần world đang được load. Mỗi người chơi giữ region xung quanh họ ở trạng thái loaded, vì vậy 2 người chơi đứng cùng một chỗ tốn ít RAM hơn nhiều so với 2 người chơi khám phá 2 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 active” mới là yếu tố quyết định. Một nhóm nhỏ thích khám phá có thể dùng hết plan vốn được tính cho số người chơi gấp đôi.

Java server có thêm 2 quy tắc. Đặt minimum heap và maximum heap bằng cùng một giá trị để JVM không phải tạm dừng nhằm resize heap:

java -Xms4G -Xmx4G -jar server.jar nogui

Sau đó chừa lại phần headroom. JVM sử dụng thêm memory bên ngoài heap đã cấp, cho thread stack và native buffer. Kernel cũng cần page cache để đọc world file nhanh. 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 biểu hiện hoàn toàn khác nhau, nên hãy ghi nhớ cả 2 chuỗi lỗi. Heap quá nhỏ gây lỗi bên trong Java, và server thường vẫn tiếp tục chạy chập chờn:

java.lang.OutOfMemoryError: Java heap space

Heap lớn hơn tổng memory của máy khiến toàn bộ process bị kill từ bên ngoài. Console chỉ hiển thị Killed, còn bằng chứng nằm trong kernel log:

sudo dmesg -T | grep -i "out of memory"

Thêm swap chỉ ngăn process bị kill, không sửa được nguyên nhân. Tick loop phải đọc world trở lại từ swap sẽ bỏ lỡ mọi deadline, vì vậy người chơi nhận được một server bị đóng băng thay vì một server bị crash.

Một lưu ý về version, được kiểm tra vào 2026-10-11 dựa trên metadata version của Mojang: Minecraft Java 1.20.5 đến 1.21.11 yêu cầu Java 21; từ 26.1 trở lên, bao gồm version hiện tại là 26.3, yêu cầu Java 25. 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. Ubuntu 22.04, 24.04 và 26.04 đều cung cấp Java 25 runtime trong archive mặc định:

sudo apt install -y openjdk-25-jre-headless
java -version

Tố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.

Tick rate, ping và sự khác biệt giữa chúng

Tick rate là số lần mỗi giây server tính toán lại trạng thái thế giới. Minecraft Java chạy ở mức 20. Server dùng Source engine thường chạy ở mức 64. Trong Minecraft, 20 là mức mà game được thiết kế để vận hành. Lệnh /tick rate có thể thay đổi mức này, nhưng nó sẽ làm toàn bộ thế giới chạy nhanh hơn hoặc chậm hơn thay vì giúp game mượt hơn. Một máy chủ cấu hình lớn hơn cũng không tự tăng mức này. Vì vậy, mục tiêu là duy trì 20 thay vì vượt quá mức đó.

Ping là thời gian round trip giữa một người chơi và server. Hai vấn đề này gây ra các biểu hiện khác nhau, nên hãy phân biệt chúng trước khi chi tiền nâng cấp. Khi server bị hụt tick, tất cả người chơi sẽ bị rubber-band cùng lúc và log của server thường ghi rõ nguyên nhân bằng văn bản. Khi một người chơi có network path dài, 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ải gói cước

Ánh sáng trong sợi quang di chuyển khoảng 200 km mỗi mili giây. Một vòng lặp (round trip) đi qua khoảng cách đó hai lần, vì vậy 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à việc nâng cấp gói cước cũng không thay đổi được nó.

Biểu đồRound trip floor by distance, fibre physics only
Dữ liệu đằng sau biểu đồ này
[
  {
    "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
  }
]

Đó là các mức sàn được tính toán dựa trên khoảng cách đường tròn lớn (great circle distance). Cáp quang thực tế không chạy theo đường thẳng và mỗi router trên đường đi đều cộng thêm một chút độ trễ, vì vậy kết quả thực tế tốt nhất thường gấp đôi mức sàn. Một 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ễ ở mức mười mấy ms. Chặng Los Angeles đến Sydney có mức sàn là 120.7 ms, và không số tiền nào có thể thay đổi điều đó.

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 bị chia cắt bởi đại dương, một người nào đó sẽ phải chịu đường truyền dài, và giải pháp công bằng thường là chọn khu vực có đa số người chơi.

Hãy đo lường đường truyền thay vì đoán mò:

sudo apt install -y mtr-tiny
mtr -rwzc 100 203.0.113.10

Hãy đọc dòng cuối cùng trước. Dòng đó là máy chủ, và tỷ lệ mất gói (loss) cùng độ trễ của nó là những yếu tố duy nhất quyết định cảm giác chơi game. Tỷ lệ mất gói hiển thị ở một hop trung gian trong khi hop cuối cùng vẫn ổn định gần như luôn là do router đó giới hạn tốc độ ICMP (ICMP rate limiting), vì các router ưu tiên chuyển tiếp lưu lượng thực tế hơn là phản hồi các gói tin thăm dò (probe packets). Hãy để mỗi người chơi chạy lệnh đo về phía máy chủ, vì mỗi người trong số họ đi theo một lộ trình khác nhau.

Cách tính mức sàn của vòng lặp (round trip)

Ánh sáng trong thủy tinh di chuyển với tốc độ bằng 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 vòng lặp đi qua khoảng cách đó hai lần, vì vậy mức sàn tính bằng mili giây chính là khoảng cách một chiều tính bằng km chia cho 100. New York đến London là 5.570 km, và 5570 chia cho 100 cho kết quả 55,7 ms. Mọi con số đo được đều cao hơn mức này, vì cáp quang phải chạy theo đường bờ biển và các router cần thời gian để xử lý dữ liệu.

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 cổng 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 Source và Source 2 của Valve, chẳng hạn như Counter-Strike 2: UDP 27015

Hãy kiểm tra tài liệu của game, vì một số game dùng thêm query port. Valheim là ví dụ rõ nhất: cổng 2456 xử lý lưu lượng game, 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 verbose

Nhiề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 được mở trong ufw nhưng bị đóng ở đó vẫn từ chối kết nối. Triệu chứng nhìn từ bên ngoài là 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 cổng TCP từ máy khác rất đơn giản:

sudo apt install -y netcat-openbsd
nc -vz 203.0.113.10 25565

Không thể kiểm tra UDP theo cách đó. Cổng UDP bị đóng thường không phản hồ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à kiểm tra process của game có bind vào đúng cổng mà bạn mong đợi hay không:

sudo ss -lunp | grep 2456

Không bao giờ expose RCON, giao thức remote console, ra Internet. Theo mặc định, đây là một password duy nhất được gửi qua kết nối plaintext trên cổng 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 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. 10 phút đầu tiên trên một VPS mới bao gồm việc tạo user account và hardening SSH mà phần này giả định bạn đã hoàn tất.

Chạy server bằng systemd để tự khởi động lại

Server được khởi chạy thủ công trong một SSH session sẽ dừng khi session đóng và vẫn không chạy lại sau khi reboot. systemd xử lý cả hai vấn đề này. Unit chạy server bằng user minecraft riêng. User này sở hữu /opt/minecraft và không sở hữu gì khác:

sudo useradd --system --home-dir /opt/minecraft --shell /usr/sbin/nologin minecraft
sudo chown -R minecraft:minecraft /opt/minecraft

Sau đó 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.target

Restart=on-failure khởi động lại server sau khi crash và giữ server dừng sau khi shutdown bình thường. Đây là hành vi cần có. Restart=always sẽ gây trở ngại mỗi khi bạn chủ động dừng server. TimeoutStopSec=180 quan trọng hơn vẻ ngoài của nó. systemctl stop gửi SIGTERM. Vanilla Minecraft server bắt signal này, lưu world rồi mới thoát. Khi timeout hết, systemd gửi SIGKILL. Một world lớn có thể cần hơn 90 giây mặc định để ghi xong. Phần dữ liệu chưa được ghi xuống disk khi SIGKILL xảy ra sẽ bị mất.

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo journalctl -u minecraft -f

Nếu khởi động thành công, log 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 sẽ cho biết nguyên nhân. Thường là do path trong WorkingDirectory không đúng hoặc heap lớn hơn dung lượng của máy.

Service systemd như service này mặc định chạy mà không có interactive console, vì vậy hãy tính đến điều đó ngay từ đầu. Dùng RCON trên localhost để gửi command, hoặc chạy server bên trong một tmux session. Đây cũng là cách giữ một session Claude Code chạy lâu trên VPS không bị gián đoạn 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 trên. Ubuntu package là một binary 32 bit, nên mới có dòng architecture. Bỏ qua dòng đó sẽ khiến apt báo không có installation candidate:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmd

Một số game server tăng dần mức sử dụng memory trong thời gian chạy. Scheduled restart vào giờ ít người dùng là workaround thường được chấp nhận, không phải cách khắc phục. Một systemd timer gọi systemctl restart dễ kiểm tra hơn cron entry, vì systemctl list-timers hiển thị chính xác thời điểm timer sẽ chạy 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 minecraft

Nế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 gaming không?

Không. VPS tiêu chuẩn không có GPU, chỉ có display adapter ảo 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 frames mỗi giây. Ngay cả khi gắn GPU, chơi từ xa vẫn thêm bước mã hóa và giải mã video vào round trip của từng frame. RDP và VNC vốn không được thiết kế cho việc này. VPS phù hợp để host dedicated server mà nhóm của bạn kết nối vào. Nếu mục tiêu của bạn là chơi game, hãy thuê GPU 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, còn các core bổ sung không thể giúp thread đó đáp ứng deadline 50 ms. So sánh các plan bằng sysbench cpu --cpu-max-prime=20000 --threads=1 run và xem chỉ số events per second. Bạn nên trả thêm cho các core bổ sung nếu 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?

Khoảng 2 GB heap cho world vanilla với khoảng 10 player, và 8 GB cho modpack lớn với cùng số player. Đặt -Xms và -Xmx cùng một giá trị. Chừa lại 1 GB đến 2 GB RAM cho operating system, vì JVM sử dụng memory bên ngoài heap và kernel cần page cache. Nếu heap lớn hơn dung lượng của máy, kernel sẽ kill process. Lỗi này xuất hiện trong dmesg dưới dạng dòng out of memory, không phải lỗi Java.

Vì sao player bị lag khi server vẫn còn dư CPU và RAM?

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 duy nhất không đáp ứng được tick budget 50 ms, trong khi các core khác vẫn idle. Trên Paper, có thể tắt cảnh báo đó bằng warn-on-overload: false trong bukkit.yml. Vì vậy, hãy xác nhận cảnh báo vẫn được bật trước khi dựa vào việc không thấy cảnh báo. Nếu cảnh báo đã bật nhưng không xuất hiện, hãy kiểm tra network path. Yêu cầu từng player chạy mtr -rwzc 100 203.0.113.10 đến địa chỉ server của bạn và đọ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 đang bị oversell, nên CPU idle bạn thấy thực tế không dành cho bạn.

Tôi cần mở những port nào cho game server?

Chỉ cần mở port 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. Thêm rule 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ở ở cả hai firewall. Không bao giờ mở RCON trên port 25575 ra Internet, vì password được gửi dưới dạng plaintext.