SSD Nodes Learn 🎉 VPS $4.99/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-08

গেম সার্ভারের জন্য VPS কীভাবে বেছে নেবেন

গেম সার্ভারের VPS বাছতে দ্রুত single core speed ও পর্যাপ্ত RAM দেখুন। sizing, ports, systemd restart, backups এবং latency-তে location-এর ভূমিকা জানুন।

আপনি কোন ধরনের gaming VPS বোঝাচ্ছেন?

Game server চালানোর জন্য VPS একটি ভালো পছন্দ হতে পারে, যদি আপনার একমাত্র কাজ হয় এমন একটি dedicated server চালানো, যেখানে আপনি এবং আপনার বন্ধুরা নিজেদের কম্পিউটার থেকে সংযুক্ত হন। কিন্তু একই বাক্যাংশে অনেকে যে অন্য বিষয়টি বোঝান, সেই কাজের জন্য এটি খারাপ পছন্দ। সেটি হলো remote desktop ব্যবহার করে VPS-এই game খেলা। এই দুই কাজের জন্য প্রয়োজনীয় hardware সম্পূর্ণ ভিন্ন। Dedicated server-এর জন্য একটি দ্রুত CPU core এবং world ধরে রাখার মতো যথেষ্ট RAM দরকার। Game খেলার জন্য GPU (graphics processing unit) দরকার, কিন্তু standard VPS plan-এ সাধারণত GPU থাকে না।

নিচের সব আলোচনা প্রথম কাজটি নিয়ে। দ্বিতীয় কাজটি সম্পর্কে সিদ্ধান্ত নেওয়ার আগে দুই মিনিট সময় নিয়ে বিষয়টি যাচাই করা উপযোগী, কারণ অনেকে এর জন্য ভুল server কেনেন।

VPS-এ গেম খেলা যায় না কেন

একটি সাধারণ VPS আপনাকে virtual CPU core দেয়, কিন্তু কোনো graphics card দেয় না। physical host থেকে কোনো hardware pass-through করা হয় না। তাই গেম ব্যবহারের জন্য কোনো hardware renderer থাকে না। আপনি বাস্তবে কী পেয়েছেন, তা দেখতে পারেন:

sudo apt install -y pciutils
lspci | grep -iE "vga|3d"

উত্তরটি হলো একটি virtual display adapter, যেমন Cirrus Logic বা virtio GPU device। এটি provider-এর web console-এ screen দেখানোর জন্য থাকে। এর পেছনে কোনো 3D acceleration থাকে না। এর ওপর desktop এবং VNC server ইনস্টল করলে glxinfo -B renderer হিসেবে llvmpipe দেখায়। এটি CPU-তে চলা Mesa-এর software renderer। CPU দিয়ে আধুনিক 3D game render করলে প্রতি সেকেন্ডে মাত্র কয়েকটি frame পাওয়া যায়। তাই কোনো data server ছাড়ার আগেই গেমটি খেলার অনুপযোগী হয়ে পড়ে। Windows instance-ও একই সমস্যায় পড়ে, তবে অন্য দিক থেকে। অনেক title launch-এর সময় বন্ধ হয়ে যায় এবং জানায় যে Direct3D device তৈরি করা যায়নি। কারণ device তৈরির জন্য কোনো display adapter নেই।

দ্বিতীয় সমস্যা হলো আপনার কাছে data ফেরত আসার পথ। দূরের একটি machine-এ খেললে প্রতিটি frame video হিসেবে encode হয়, Internet-এর মাধ্যমে পাঠানো হয় এবং আপনার screen-এ decode হয়। এতে গেমের নিজস্ব input lag-এর সঙ্গে encoding ও decoding-এর সময়ও যোগ হয়। RDP এবং VNC 60 frames per second-এর motion-এর জন্য নয়, desktop ব্যবহারের জন্য তৈরি। Cloud gaming service-গুলো বাস্তব GPU hardware এবং এই কাজের জন্য তৈরি streaming protocol ব্যবহার করে এই সমস্যা সমাধান করে। সাধারণ VPS-এ কোনোটিই থাকে না। খেলতে চাইলে GPU time ভাড়া নিন। host করতে চাইলে পড়তে থাকুন।

একটি dedicated game server-এর প্রকৃত প্রয়োজনীয়তা

একটি game server মূলত একটি simulation loop। এটি world-কে memory-তে ধরে রাখে এবং প্রতি সেকেন্ডে নির্দিষ্ট সংখ্যক বার এগিয়ে নেয়। এরপর প্রতিটি connected player-কে সেই world-এর তারা দেখতে পারে এমন অংশ পাঠানো হয়।

এই কাঠামোই hardware-এর প্রয়োজন নির্ধারণ করে। loop-টি প্রধানত একটি thread-এ চলে, তাই core count-এর চেয়ে core speed বেশি গুরুত্বপূর্ণ। world memory-তে থাকে, তাই সাধারণত RAM-ই প্রথম সীমা তৈরি করে। খেলার সময় disk-এর কাজ কম থাকে; load ও save-এর সময় disk ব্যস্ত থাকে। আপনার network path-ই ping নির্ধারণ করে। কোনো plan tier এটি পরিবর্তন করতে পারে না।

একক-কোরের গতি কোরের সংখ্যার চেয়ে বেশি গুরুত্বপূর্ণ

বেশিরভাগ game server একটি প্রধান thread-এ world update করে। Minecraft-এর tick loop এবং Source engine-এর server frame—দুটিই এভাবে কাজ করে। প্রতিটি tick-এর একটি নির্দিষ্ট সময়সীমা থাকে। Minecraft Java প্রতি সেকেন্ডে 20টি tick চালায়। তাই প্রতিটি tick-এর জন্য 50 milliseconds সময় বরাদ্দ থাকে। কাজটি এই সময়ের মধ্যে শেষ না হলে server ঠিক এই বার্তাটি দেখায়:

[12:04:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2547ms or 50 ticks behind

এর অর্থ হলো, একটি thread-এর নির্ধারিত সময় শেষ হয়ে গেছে। অতিরিক্ত core যোগ করলে ওই thread-এর জন্য বেশি সময় তৈরি হয় না। 2টি দ্রুত vCPU-র plan এমন tick rate ধরে রাখতে পারে, যা 8টি ধীর vCPU-র plan-এ কমে যায়। কারণ 8টির মধ্যে মাত্র একটি core গুরুত্বপূর্ণ কাজটি করছে।

কোনো plan নেওয়ার আগে single-thread speed মাপুন:

sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 run

events per second line-টি দেখুন। সংখ্যাটি একা কোনো অর্থ বহন করে না; তুলনা করলেই এর অর্থ বোঝা যায়। তাই দুটি সম্ভাব্য plan-এ এটি চালিয়ে ফল পাশাপাশি রাখুন। সম্পূর্ণ VPS benchmark চালানো একইভাবে disk এবং network পরীক্ষা করে।

অতিরিক্ত core-এরও প্রয়োজন আছে। এগুলো দ্বিতীয় game server, database, nightly backup এবং chunk pre-generator চালাতে পারে, ফলে tick thread-এর সময় কমে না। Server software-ও এখন কাজ ভাগ করে চালাতে পারে। জনপ্রিয় Minecraft server fork Paper main tick thread-এর কিছু কাজ অন্য thread-এ সরিয়ে দেয়। তাই কেনার জন্য উপযুক্ত বিন্যাস হলো কয়েকটি দ্রুত core, অনেকগুলো ধীর core নয়।

একটি সংখ্যা plan page-এ কখনো দেখা যায় না। অথচ আপনি যে দ্রুত core-এর জন্য অর্থ দিচ্ছেন, সেটি সত্যিই আপনার ব্যবহারের জন্য পাওয়া যাচ্ছে কি না, তা এই সংখ্যাই নির্ধারণ করে:

vmstat 1 5

st column-এ দেখানো হয়, আপনার virtual CPU কত শতাংশ সময় run করার জন্য ready ছিল, কিন্তু physical host সেই core অন্য কাউকে দিয়েছে। st যদি নিয়মিতভাবে কয়েক শতাংশের বেশি থাকে, তাহলে host অতিরিক্তভাবে oversell করা হয়েছে। আপনার server-এ top idle CPU দেখালেও players এটি stutter হিসেবে অনুভব করে, কারণ ওই idle সময় আপনার ব্যবহারের জন্য নয়।

একটি game server-এর কত RAM প্রয়োজন?

ChartCommon starting RAM per game server (published guidance, not a measurement)
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
  }
]

এগুলো হলো game এবং modpack documentation-এ August 2026 পর্যন্ত প্রকাশিত প্রাথমিক allocation। এগুলো নির্দেশনা, কোনো একটি server-এ মাপা নির্দিষ্ট সংখ্যা নয়। প্রায় 10 জন player-এর জন্য Vanilla Minecraft Java 2 GB heap-এ স্বচ্ছন্দে চলে। একই সংখ্যক player-সহ একটি বড় modpack-এর জন্য 8 GB প্রয়োজন, কারণ mods এমন entity ও generated structure যোগ করে যেগুলো ওই heap-এই থাকে। Valheim-এর প্রকাশিত minimum হলো 2 GB। তবে ছোট world পরিচালনাকারীরা জানান যে process সাধারণত প্রায় 3 GB-এ স্থিত হয়। তাই 4 GB দিয়ে শুরু করাই যুক্তিসঙ্গত। 32 জন player-এর maximum-এর জন্য Palworld ব্যতিক্রম; এর প্রয়োজন 16 GB, যা Pocketpair-এর সুপারিশ।

RAM connection-এর সংখ্যার সঙ্গে সরাসরি বাড়ে না। RAM loaded world-এর পরিমাণের সঙ্গে বাড়ে। প্রতিটি player তাদের চারপাশের region loaded রাখে। তাই পাশাপাশি দাঁড়ানো দুই player-এর খরচ map-এর বিপরীত প্রান্তে ঘুরে বেড়ানো দুই player-এর তুলনায় অনেক কম। এ কারণেই “প্রতি player RAM” শুধু আনুমানিক নির্দেশনা। প্রকৃত নির্ধারক হলো “প্রতি active area RAM”। তাই ছোট একটি group exploration পছন্দ করলে তাদের দ্বিগুণ সংখ্যক player ধরে তৈরি করা plan-ও অতিক্রম করতে পারে।

Java server-এর জন্য আরও দুটি নিয়ম প্রযোজ্য। Minimum এবং maximum heap একই value-তে সেট করুন, যাতে JVM heap resize করার জন্য কখনও pause না করে:

java -Xms4G -Xmx4G -jar server.jar nogui

এরপর কিছু headroom রাখুন। আপনি যে heap দিয়েছেন, JVM তার বাইরে thread stack এবং native buffer-এর জন্যও memory ব্যবহার করে। World file দ্রুত পড়ার জন্য kernel-এর page cache-ও প্রয়োজন। 6 GB-এর server-এ 4 GB heap যুক্তিসঙ্গত। 6 GB heap যুক্তিসঙ্গত নয়।

দুটি memory failure সম্পূর্ণ ভিন্নভাবে দেখা যায়। তাই উভয় error string চিনে রাখুন। Heap খুব ছোট হলে Java-এর ভেতরে error হয় এবং server সাধারণত ধীরগতিতে চলতে থাকে:

java.lang.OutOfMemoryError: Java heap space

Heap server-এর মোট memory-এর চেয়ে বড় হলে বাইরের system পুরো process-টিকে kill করে। Console-এ শুধু Killed দেখা যায়। প্রমাণ থাকে kernel log-এ:

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

Swap যোগ করলে kill বন্ধ হতে পারে, কিন্তু মূল সমস্যা ঠিক হয় না। Tick loop-কে swap থেকে world আবার পড়তে হলে প্রতিটি deadline মিস হয়। ফলে crashed server-এর বদলে players একটি frozen server পায়।

August 2026 পর্যন্ত প্রযোজ্য একটি version note: Minecraft Java 1.20.5 এবং পরবর্তী version-এর জন্য Java 21 প্রয়োজন। পুরোনো runtime start হওয়ার পর unsupported class file version error দিয়ে ব্যর্থ হয়। এটি compiler-এর message-এর মতো দেখায় এবং প্রথমবার দেখলে সবাই বিভ্রান্ত হয়।

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

গেম সার্ভারের জন্য ডিস্কের গতি কি গুরুত্বপূর্ণ?

খেলার সময় ডিস্কের গতি যতটা গুরুত্বপূর্ণ মনে হয়, বাস্তবে তার চেয়ে কম গুরুত্বপূর্ণ। তবে দুটি নির্দিষ্ট সময়ে এর প্রভাব অনেক বেশি। সার্ভার চালুর সময় world মেমরিতে পড়া হয় এবং autosave-এর সময় আবার ডিস্কে লেখা হয়। তাই ডিস্কের গতি কম হলে boot ধীর হয় এবং save চলার সময় বিরতি দেখা দেয়। এর মধ্যবর্তী সময়ে অধিকাংশ read RAM থেকে পরিবেশিত হয়।

উপরের সারাংশের চেয়ে দুটি কারণে ডিস্কের গুরুত্ব বেশি। খেলোয়াড়েরা চলাচল করার সময় exploration-এর জন্য ডিস্ক থেকে নতুন chunk বা zone load হয়, এবং এই read tick budget-এর মধ্যেই সম্পন্ন করতে হয়। বড় world-এর autosave একবারে অনেক data লেখে। ধীর volume-এ এই write loop-কে এতক্ষণ block করতে পারে যে উপরের "Can't keep up" warning দেখা যায়। উভয় ক্ষেত্রেই সমস্যা throughput-এর চেয়ে latency-সংক্রান্ত। তাই VPS-এ NVMe ও SATA SSD-এর পার্থক্য এখানে headline megabytes per second-এর চেয়ে বেশি গুরুত্বপূর্ণ। একটি ছোট operation সম্পন্ন হতে কত সময় লাগে, সেটিই মূল বিষয়।

ভবিষ্যৎ বৃদ্ধির জন্য volume-এর আকার নির্ধারণ করুন। কেউ নতুন কোনো জায়গায় গেলেই world বড় হয়, এবং আপনার backup-গুলো world-এর আকারের সঙ্গে সঙ্গে বাড়ে। এক মাস ধরে সপ্তাহে একবার du -sh world চালালে আপনার প্রকৃত growth rate জানা যাবে।

Tick rate, ping এবং এদের পার্থক্য

Tick rate হলো server প্রতি সেকেন্ডে কতবার game world পুনর্গণনা করে। Minecraft Java 20-এ চলে। Source engine server-গুলো সাধারণত 64-এ চলে। Minecraft-এ বেশি tick rate কিনে বাড়ানো যায় না, কারণ এই rate game-এর নকশার অংশ। তাই লক্ষ্য হলো 20 বজায় রাখা, এর বেশি করা নয়।

Ping হলো একজন player এবং server-এর মধ্যে network round trip। এই দুই সমস্যায় অভিযোগের ধরন আলাদা, তাই টাকা খরচ করার আগে এগুলো আলাদা করে শনাক্ত করুন। Server tick মিস করলে সবাই একই সময়ে rubber-band করে, এবং server log-এ তা স্পষ্টভাবে লেখা থাকে। কোনো একজন player-এর network path দীর্ঘ হলে শুধু সেই player lag করে, আর দলের বাকি সবাই স্বাভাবিক থাকে। বেশি ক্ষমতার CPU কখনও দ্বিতীয় সমস্যাটি ঠিক করবে না।

Latency অবস্থানের ওপর নির্ভর করে, plan tier-এর ওপর নয়

Fibre-তে আলো প্রতি millisecond-এ প্রায় 200 kilometre অতিক্রম করে। Round trip-এ দূরত্ব দুইবার অতিক্রম করতে হয়। তাই player এবং server-এর মধ্যে প্রতি 100 km দূরত্বের জন্য ন্যূনতম latency প্রায় 1 ms। কোনো provider এই সীমা অতিক্রম করে কম latency দিতে পারে না। কোনো plan upgrade করেও এটি পরিবর্তন করা যায় না।

ChartRound trip floor by distance, fibre physics only
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
  }
]

এগুলো great circle distance থেকে গণনা করা ন্যূনতম মান। বাস্তবে fibre সরলরেখায় যায় না। পথে থাকা প্রতিটি router সামান্য latency যোগ করে। তাই ভালো বাস্তব ফলাফল সাধারণত এই ন্যূনতম মানের প্রায় দ্বিগুণের কাছাকাছি হয়। Toronto-র কোনো player New York-এর server-এ সংযোগ করলে, যার দূরত্ব 550 km, ন্যূনতম latency হবে 5.5 ms। সাধারণত latency টিনের ঘরে দেখা যাবে। Los Angeles থেকে Sydney পর্যন্ত পথে ন্যূনতম latency 120.7 ms। কোনো পরিমাণ অর্থ ব্যয় করেও এটি কমানো যায় না।

তাই server-টি সেইসব মানুষের কাছাকাছি রাখুন যারা এতে খেলবে। আপনার group যদি একটি ocean-এর দুই পাশে বিভক্ত থাকে, তাহলে কারও না কারও দীর্ঘ path ব্যবহার করতেই হবে। সাধারণত যে region-এ অধিকাংশ player থাকে, server সেখানে রাখাই ন্যায্য সমাধান।

অনুমান না করে path মাপুন:

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

প্রথমে শেষ লাইনটি দেখুন। ওই লাইনটি server নির্দেশ করে। সেখানে দেখানো loss এবং latency-ই game-এর অনুভূতি নির্ধারণ করে। মাঝের কোনো hop-এ loss থাকলেও final hop পরিষ্কার থাকলে, সেটি প্রায় সবসময় ওই router-এর ICMP rate limiting-এর ফল। কারণ router-গুলো probe packet-এর reply-কে কম priority দেয়, কিন্তু real traffic স্বাভাবিকভাবে forward করে। প্রত্যেক player-কে server-এর দিকে এটি চালাতে বলুন। কারণ প্রত্যেকের path আলাদা হতে পারে।

Round trip-এর ন্যূনতম latency কীভাবে গণনা করা হয়

কাচের মধ্যে আলো vacuum-এ আলোর গতির প্রায় দুই-তৃতীয়াংশ বেগে চলে। এর ফলাফল প্রতি millisecond-এ প্রায় 200 km। Round trip-এ দূরত্ব দুইবার অতিক্রম করতে হয়। তাই milliseconds-এ ন্যূনতম latency হলো one-way দূরত্বের kilometre মানকে 100 দিয়ে ভাগ করা। New York থেকে London-এর দূরত্ব 5,570 km। 5570-কে 100 দিয়ে ভাগ করলে 55.7 ms হয়। প্রতিটি measured মান এর চেয়ে বেশি হয়। কারণ cable coastline অনুসরণ করে এবং router-গুলোর packet process করতে সময় লাগে।

যে portগুলো game-এর প্রয়োজন, শুধু সেগুলোই খুলুন

একটি game server-এর জন্য এক বা দুটি port খোলা থাকা যথেষ্ট। অন্য কোনো port খোলার দরকার নেই। প্রচলিত defaultগুলো হলো:

  • Minecraft Java Edition: TCP 25565
  • Minecraft Bedrock Edition: UDP 19132
  • Valheim: UDP 2456 এবং UDP 2457
  • Palworld: UDP 8211
  • Counter-Strike 2-এর মতো Source engine game: UDP 27015

Game-এর নিজস্ব documentation পরীক্ষা করুন, কারণ কিছু title অতিরিক্ত query port ব্যবহার করে। Valheim এর সবচেয়ে স্পষ্ট উদাহরণ। 2456 game traffic বহন করে, আর 2457 Steam server query-এর উত্তর দেয়। এর মাধ্যমে server browser list-এ আপনার server দেখা যায়। TCP-তে এই portগুলো খুললে কোনো কাজ হবে না, কারণ Valheim শুধু UDP ব্যবহার করে।

Firewall enable করার আগে SSH-এর জন্য port অনুমোদন করুন। তা না হলে নিজের server-এই প্রবেশাধিকার হারাবেন:

sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable
sudo ufw status verbose

অনেক provider তাদের control panel-এ box-এর firewall থেকে আলাদা একটি network firewall-ও চালায়। ufw-এ কোনো port খোলা থাকলেও সেখানে বন্ধ থাকলে connection গ্রহণ করা হবে না। বাইরে থেকে লক্ষণ একই দেখায়। তাই config file সম্পাদনা শুরু করার আগে উভয় জায়গা পরীক্ষা করুন।

অন্য একটি machine থেকে TCP port পরীক্ষা করা সহজ:

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

এই পদ্ধতিতে UDP পরীক্ষা করা যায় না। বন্ধ UDP port সাধারণত কোনো উত্তর দেয় না। তাই কোনো reply না পাওয়া probe থেকে আসলে কিছুই নিশ্চিত হওয়া যায় না। এর পরিবর্তে server side থেকে নিশ্চিত করুন এবং প্রত্যাশিত port-এ game process bind করা আছে কি না দেখুন:

sudo ss -lunp | grep 2456

RCON, অর্থাৎ remote console protocol, কখনো Internet-এ প্রকাশ করবেন না। এটি defaultভাবে port 25575-এ plaintext connection-এর মাধ্যমে একটি password পাঠায়। এটিকে 127.0.0.1-এ bind করুন এবং SSH tunnel-এর মাধ্যমে ব্যবহার করুন। Game server-টিও একটি আলাদা unprivileged user হিসেবে চালান। তাহলে কোনো mod-এর bug থাকলেও সেটি machine-এর বাকি অংশে পৌঁছাতে পারবে না। নতুন VPS-এ প্রথম দশ মিনিট-এ এই section-এ আগে থেকেই সম্পন্ন ধরে নেওয়া user account তৈরি এবং SSH hardening-এর বিষয়গুলো ব্যাখ্যা করা হয়েছে।

systemd-এর অধীনে server চালান, যাতে এটি পুনরায় চালু হয়

SSH session-এ হাতে শুরু করা server session বন্ধ হলে বন্ধ হয়ে যায়, এবং reboot-এর পরও বন্ধ থাকে। systemd উভয় সমস্যার সমাধান করে। /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 server পুনরায় চালু করে এবং স্বাভাবিকভাবে বন্ধ করার পর server বন্ধই রাখে। আপনি ইচ্ছাকৃতভাবে server বন্ধ করলেই Restart=always আবার এটি চালু করার চেষ্টা করে। TimeoutStopSec=180-এর গুরুত্ব আপাতদৃষ্টিতে যতটা মনে হয়, তার চেয়ে বেশি। systemctl stop SIGTERM পাঠায়। vanilla Minecraft server এই signal ধরে world সংরক্ষণ করে তারপর বন্ধ হয়। timeout শেষ হলে systemd SIGKILL পাঠায়। বড় world লিখতে default 90 seconds-এর বেশি সময় লাগতে পারে। SIGKILL পাঠানোর সময় disk-এ না লেখা যেকোনো তথ্য হারিয়ে যাবে।

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

সফলভাবে start হলে শেষে Done (12.345s)! For help, type "help"-এর মতো একটি line দেখা যায়। unit যদি activating এবং failed অবস্থার মধ্যে বারবার পরিবর্তিত হয়, তাহলে journalctl -u minecraft -n 50 কারণটি দেখায়। সাধারণত WorkingDirectory-এ ভুল path থাকে, অথবা heap-এর আকার server-এর memory-এর চেয়ে বড় হয়।

systemd আপনাকে interactive console দেয় না। তাই শুরুতেই এর ব্যবস্থা করুন। command চালানোর জন্য localhost-এ RCON ব্যবহার করুন। অথবা server-টি একটি tmux session-এর মধ্যে চালান। এটি সেই একই পদ্ধতি, যা login-এর মাঝেও VPS-এ দীর্ঘ সময় চলমান Claude Code session চালু রাখে

Steam-এর মাধ্যমে বিতরণ করা game-এর জন্য এসব করার আগে SteamCMD প্রয়োজন। Ubuntu package-টি একটি 32 bit binary। তাই architecture line-টি সেখানে আছে। সেই line বাদ দিলে apt জানায় যে এর জন্য কোনো installation candidate নেই:

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

কিছু game server যত বেশি সময় চলে, তত বেশি memory ব্যবহার করতে থাকে। এ ক্ষেত্রে সমাধান নয়, বরং প্রচলিত workaround হলো নিরিবিলি সময়ে নির্ধারিত restart করা। cron entry-এর চেয়ে systemctl restart ব্যবহার করা systemd timer বোঝা সহজ। কারণ systemctl list-timers পরবর্তী execution ঠিক কখন হবে তা দেখায়।

নির্ধারিত সময়সূচিতে সম্পূর্ণ backup নিন

একটি game server-এর সবকিছুই পুনরায় তৈরি বা প্রতিস্থাপন করা যায়, শুধু world directory এবং player data ছাড়া। Game পুনরায় install করতে কয়েক মিনিট লাগে। আপনার দল যা তৈরি করেছে, তা পুনর্নির্মাণ করতে কয়েক মাস লাগতে পারে।

কোনো কিছু write না করার সময় নেওয়া backup-ই নিরাপদ। এক মিনিটের জন্য server বন্ধ করা হলো এটি নিশ্চিত করার সবচেয়ে সহজ উপায়:

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

রাতের pause গ্রহণযোগ্য না হলে আগে world flush করুন। Minecraft console-এ save-off autosave বন্ধ করে, save-all flush তখনও pending থাকা সবকিছু write করে, এবং copy শেষ হলে save-on আবার autosave চালু করে। Server write করার মাঝখানে কোনো world copy করলে এমন একটি region file সংরক্ষিত হতে পারে যা মাত্র আংশিকভাবে write হয়েছে। Restore-এর প্রয়োজনের দিন না আসা পর্যন্ত আপনি এটি বুঝতে পারবেন না।

অন্তত একটি copy machine-এর বাইরে রাখুন। একই disk-এ থাকা backup disk নষ্ট হলে টিকে থাকে না। Provider snapshot সুবিধাজনক, কিন্তু এটি backup নয়, কারণ এটি একই account-এ থাকে, যে account-এ আপনার প্রবেশাধিকার হারাতে পারেন। Off-site storage-এ নির্ধারিত restic backup retention এবং deduplication পরিচালনা করে। ফলে এক মাসের nightly world copy আপনার volume পূর্ণ করে না।

এরপর একটি restore করে দেখুন। যে backup কখনো restore করা হয়নি, সেটি শুধু একটি অনুমান। গত রাতের archive একটি spare directory-তে extract করুন, একটি test server-কে সেটির দিকে point করুন, এবং নিশ্চিত করুন যে world load হচ্ছে ও buildings আগের অবস্থানেই আছে।

কমিট করার আগে বিষয়টি যাচাই করুন

এক বছরের বদলে এক মাস কিনুন এবং এক সন্ধ্যায় প্রকৃত খেলোয়াড়দের দিয়ে পরীক্ষা করুন। একক-থ্রেডের sysbench পরীক্ষা চালান। এরপর প্রত্যেক খেলোয়াড়কে সার্ভারের দিকে mtr চালাতে বলুন। সম্পূর্ণ VPS benchmark পদ্ধতি এই টুলগুলোর ব্যবহার ধাপে ধাপে দেখায় এবং খারাপ ফলাফল কেমন হয় তা ব্যাখ্যা করে। VPS-এর প্রকৃত মাসিক খরচ পড়লে বুঝতে পারবেন, plan page-এ সবচেয়ে বড় করে লেখা resource-এর জন্য নয়, বরং যে resource আপনার সার্ভারের সীমা নির্ধারণ করে সেটির জন্যই আপনি অর্থ দিচ্ছেন কি না।

এই লেখার পরের বিষয় দুটি পৃথক পোস্টে ব্যাখ্যা করা হয়েছে। VPS-এ Minecraft server তৈরি করা উপরের সব বিষয়ের ধাপে ধাপে সংস্করণ; এটি সেই গেমকে কেন্দ্র করে, যেটি দিয়ে অধিকাংশ মানুষ শুরু করে। VPS-এ চালানো যায় এমন বিষয়গুলোর বিস্তৃত তালিকা পড়া উপযোগী হবে, যদি আপনি চান game night-এর মাঝের সময়েও সার্ভারটি কোনো কাজে ব্যবহার হোক।

FAQ

আমি কি gaming PC কেনার বদলে VPS-এ গেম খেলতে পারি?

না। একটি সাধারণ VPS-এ GPU থাকে না; provider-এর console-এর জন্য শুধু একটি virtual display adapter থাকে। তাই desktop ইনস্টল করার পরে glxinfo -B software renderer llvmpipe দেখায়, এবং 3D game প্রতি সেকেন্ডে মাত্র কয়েকটি frame-এ চলে। GPU সংযুক্ত থাকলেও remote play-তে প্রতিটি frame-এর round trip-এ video encoding ও decoding যুক্ত হয়, আর RDP ও VNC কখনোই এ ধরনের কাজের জন্য তৈরি হয়নি। আপনার group যে dedicated server-এ সংযোগ করবে, VPS সেই server host করার জন্য ব্যবহার করুন। আপনি যদি নিজে গেম খেলতে চান, GPU time ভাড়া নিন অথবা cloud gaming service ব্যবহার করুন।

একটি game server-এর কত CPU core প্রয়োজন?

বেশিরভাগ game-এর ক্ষেত্রে আটটি ধীর core-এর চেয়ে দুটি দ্রুত core ভালো। কারণ world simulation একটি main thread-এ চলে, এবং অতিরিক্ত core সেই thread-কে 50 ms-এর deadline পূরণে সাহায্য করতে পারে না। sysbench cpu --cpu-max-prime=20000 --threads=1 run দিয়ে সম্ভাব্য plan-গুলোর তুলনা করুন এবং events per second-এর মান দেখুন। একই machine-এ দ্বিতীয় server বা database চালালে অতিরিক্ত core-এর জন্য অর্থ দেওয়া যুক্তিযুক্ত। তখন ওই workload-গুলো tick thread-এর সময় না কেড়ে আলাদাভাবে চলতে পারে।

একটি Minecraft server-এর কত RAM প্রয়োজন?

প্রায় 2 GB heap একটি vanilla world-এর জন্য যথেষ্ট, যদি player সংখ্যা আনুমানিক 10 হয়। একই player সংখ্যায় একটি বড় modpack-এর জন্য 8 GB প্রয়োজন। -Xms এবং -Xmx-এ একই value সেট করুন। Operating system-এর জন্য machine-এ 1 GB থেকে 2 GB খালি রাখুন। কারণ JVM heap-এর বাইরেও memory ব্যবহার করে এবং kernel-এর page cache প্রয়োজন। Heap-এর আকার machine-এর মোট memory-এর চেয়ে বড় হলে kernel process-টিকে বন্ধ করে দেয়। dmesg-এ এটি Java error হিসেবে নয়, বরং একটি out of memory line হিসেবে দেখা যায়।

Server-এ CPU ও RAM খালি থাকা সত্ত্বেও players কেন lag করে?

এই বর্ণনার সঙ্গে দুটি কারণ মেলে। Server log-এ Can't keep up! Is the server overloaded? খুঁজুন। এর অর্থ হলো, অন্য core-গুলো idle থাকা অবস্থায় single main thread তার 50 ms tick budget পূরণ করতে পারেনি। ওই line না থাকলে সমস্যা network path-এ। তাই প্রত্যেক player-কে server address-এর বিরুদ্ধে mtr -rwzc 100 203.0.113.10 চালিয়ে শেষ line দেখতে বলুন। এছাড়া vmstat 1-এর st column পরীক্ষা করুন। কয়েক শতাংশের বেশি steal time হলে host oversold। তাই আপনি যে idle CPU দেখছেন, তা আসলে আপনার জন্য available নয়।

একটি game server-এর জন্য কোন port খুলতে হবে?

শুধু game-এর নিজস্ব port এবং SSH খুলুন। Minecraft Java TCP 25565 ব্যবহার করে, Minecraft Bedrock UDP 19132 ব্যবহার করে, Valheim UDP 2456 এবং 2457 ব্যবহার করে, আর Palworld UDP 8211 ব্যবহার করে। ufw enable চালানোর আগে SSH rule যোগ করুন। তা না হলে machine-এ আপনার access হারাবেন। মনে রাখবেন, অনেক provider তাদের control panel-এ দ্বিতীয় firewall চালায়। তাই উভয় firewall-এই port খোলা থাকতে হবে। Internet-এর জন্য port 25575-এ RCON কখনো খুলবেন না। কারণ এতে একটি password plaintext-এ পাঠানো হয়।