دليل
كم RAM يحتاج سيرفر Minecraft؟
معظم النصائح حول ذاكرة سيرفر Minecraft إما منخفضة جدًا فلا تفيد، أو مرتفعة جدًا فتهدر المال. يعتمد هذا الدليل على الأرقام الواردة في Minecraft Wiki وتوثيق Paper، ويشرح ما الذي يملأ الذاكرة فعلًا وما الذي يسبب التأخير (lag)، وينتهي بكيفية ضبط heap حتى لا تتسبب Java في نفاد ذاكرة السيرفر. يغطي الدليل سيرفرات Java Edition: الأصلية (vanilla) وPaper والمعدّلة (modded).
بقلم فريق Evorxaتاريخ النشر
الإجابة المختصرة
يقدّم مصدران نوعين من الأرقام. تذكر Minecraft Wiki ما يحتاجه سيرفر vanilla بالإعدادات الافتراضية مع عالم مُنشأ حديثًا. ويوصي فريق Paper بما يجب أن يحصل عليه سيرفر Paper ليعمل جيدًا، أيًا كان عدد اللاعبين.
| المصدر | الإعداد | الذاكرة |
|---|---|---|
| Minecraft Wiki، الحد الأدنى | vanilla، من 1 إلى 4 لاعبين | 1 GB |
| Minecraft Wiki، الموصى به | vanilla، من 5 إلى 10 لاعبين | 2 GB |
| Minecraft Wiki، الأفضل | vanilla، 10 لاعبين أو أكثر | 4 GB |
| توثيق Paper (Aikar's flags) | Paper، أي عدد من اللاعبين | heap من 6 إلى 10 GB |
أرقام الويكي حد أدنى لعالم جديد. العوالم تكبر، واللاعبون يتفرقون، والإضافات (plugins) تضيف بياناتها الخاصة، لذا يحتاج السيرفر العام الذي يعمل لأشهر إلى أكثر من ذلك. طريقة عملية للاختيار:
- سيرفر vanilla أو Paper صغير للأصدقاء: ذاكرة سيرفر بحجم 4 GB تغطي رقم الويكي لـ 10 لاعبين أو أكثر، مع تخصيص نحو 2.5 إلى 3 GB منها لـ Java. ويفضّل فريق Paper أن تعطيه أكثر إن أمكنك.
- سيرفر Paper مع إضافات وعالم يتوسع: اتبع نصيحة Paper وخطط لـ heap من 6 إلى 10 GB، أي سيرفر بذاكرة من 8 إلى 12 GB.
- سيرفر معدّل (modded): استخدم الرقم الذي ينشره مؤلف حزمة المودات (modpack). لا توجد قاعدة عامة، لأن مودًا واحدًا قد يحتاج أكثر مما تحتاجه اللعبة الأصلية كلها.
ويحذّر Paper أيضًا من الخطأ المعاكس: بعد حد معيّن تتناقص الفائدة من زيادة الذاكرة، وشراء 32 GB من RAM لسيرفر يهدر المال في الغالب.
ما الذي يملأ الذاكرة
تقدّر الويكي كائن اللاعب الواحد بنحو 50 إلى 100 MB، وتضيف أن السيرفر كثيرًا ما يضطر إلى تخصيص أكثر من ذلك بكثير لكل لاعب، لأن كل لاعب يُبقي منطقة من العالم محمّلة حوله. ويزداد استهلاك الذاكرة مع نمو حجم العالم وارتفاع مسافات الرؤية. ويُضاف إلى ذلك الكيانات (entities) مثل المخلوقات (mobs) والعناصر وعربات المناجم، وبيانات الإضافات والمودات، ومساحة العمل الخاصة بـ Java نفسها.
كما أن ذاكرة Java لا تتصرف كعدّاد بسيط. ينشئ Minecraft عددًا هائلًا من الكائنات (objects) قصيرة العمر ويتخلص منها كل ثانية، ويقوم جامع المهملات (garbage collector) بتنظيفها على دورات. يذكر توثيق Paper معدل تخصيص لا يقل عن 800 MB في الثانية على سيرفر فيه 30 لاعبًا. وheap الصغير جدًا يجعل جامع المهملات يعمل باستمرار، وتظهر فترات التوقف هذه على شكل تأخير.
التأخير سببه المعالج عادةً، لا RAM
تشغّل اللعبة محاكاة العالم على شكل نبضات (ticks)، بمعدل 20 في الثانية. هذا يعطي كل نبضة 50 ميلي ثانية. ووفقًا للويكي، ينجز السيرفر معظم هذا العمل على نواة واحدة ولا يستخدم الأنوية الأخرى إلا لمهام جانبية، لذا فإن سرعة النواة الواحدة هي التي تحدد كم يستطيع السيرفر أن يتحمل قبل أن تستغرق النبضات أكثر من 50 ms ويتباطأ العالم. الأعداد الكبيرة من المخلوقات ودوائر redstone المعقدة هي الأسباب المعتادة.
لهذا نادرًا ما تحل إضافة RAM مشكلة التأخير في سيرفر لديه ما يكفي منها أصلًا. إذا كانت قيمة /mspt مرتفعة بينما في الذاكرة متسع، فأنت تحتاج إلى نواة أسرع أو إلى عمل أقل في كل نبضة، لا إلى المزيد من الغيغابايتات. بعض الإضافات تنقل عملها الخاص إلى أنوية أخرى؛ وتنصح الويكي بقراءة توثيق الإضافة قبل تثبيتها.
مسافة الرؤية ومسافة المحاكاة
يحدد إعدادان في server.properties حجم الجزء من العالم الذي يُبقيه كل لاعب مشغولًا. يُقاس كلاهما بالقطع (chunks) كنصف قطر حول اللاعب، وقيمتهما الافتراضية 10، ويقبلان قيمًا من 3 إلى 32، كما هو مذكور في مرجع server.properties.
view-distanceهو مقدار بيانات العالم التي يرسلها السيرفر إلى اللاعب. يكلّف الذاكرة وعرض النطاق في الغالب.simulation-distanceهو المسافة من اللاعب التي تظل الكيانات الحية ضمنها تُحدَّث. يكلّف المعالج في كل نبضة.
تنمو المساحة مع مربع نصف القطر، لذا فإن التوفير أكبر مما توحي به الأرقام: النزول من 10 إلى 6 يقلّص المساحة إلى نحو الثلث. إبقاء مسافة المحاكاة أقل من مسافة الرؤية يتيح للاعبين الرؤية إلى مدى بعيد بينما لا يشغّل السيرفر إلا المنطقة القريبة:
# server.properties (both default to 10, allowed range 3 to 32)
view-distance=8
simulation-distance=6حجم heap مقارنة بذاكرة السيرفر
تحدد قيمة -Xmx الحجم الأقصى لـ heap في Java. وهي ليست إجمالي الذاكرة التي تستخدمها العملية. تحتاج Java إلى ذاكرة إضافية فوقها لهياكلها الداخلية وخيوطها ومخازنها المؤقتة، ويحتاج نظام التشغيل إلى ذاكرة أيضًا. إذا أعطيت heap كل ما لدى السيرفر، فقد توقف آلية out-of-memory killer في Linux عملية السيرفر دون سابق إنذار.
يعطي توثيق Paper القاعدة: اضبط -Xmx و-Xms على قيمة أقل بنحو 1000 إلى 1500 MB من الذاكرة المتوفرة لديك. مع 8 GB، استخدم 6500 MB. واضبط الاثنين على القيمة نفسها: يوضح Paper أنه يجب توقّع أن يستخدم السيرفر heap كاملًا على أي حال، وأن الذاكرة المتروكة تحت -Xmx تبقى غير مستخدمة.
| ذاكرة السيرفر | -Xms و-Xmx |
|---|---|
| 4 GB | من 2500 إلى 3000 MB |
| 8 GB | 6500 MB |
| 12 GB | من 10500 إلى 11000 MB |
| 16 GB | من 14500 إلى 15000 MB |
إذا لم تضبط -Xmx إطلاقًا، تختار Java قيمة افتراضية بناءً على النظام، وداخل الحاوية تقرأ حد الذاكرة الخاص بالحاوية، كما يصف مرجع أمر java. ونادرًا ما تكون القيمة الافتراضية ما تريده لسيرفر ألعاب، لذا اضبطها دائمًا.
Aikar's flags
ينشر Paper مجموعة من إعدادات جامع المهملات تُعرف باسم Aikar's flags، مضبوطة لنمط التخصيص في Minecraft. تستخدم جامع G1، وتعطيه جيلًا شابًا (young generation) أكبر حتى تُنظَّف الكائنات قصيرة العمر قبل ترقيتها، وتحجز الذاكرة مسبقًا عبر AlwaysPreTouch، وتمنع الإضافات من فرض عمليات جمع كاملة عبر DisableExplicitGC. يحتاج Paper إلى Java 25 أو أحدث، وفقًا لـ دليل البدء الخاص به، لذا تحقق من الإصدار أولًا:
# Paper needs Java 25 or newer
java -version# 8 GB server: heap 6500 MB, Aikar's flags (Paper docs)
java -Xms6500M -Xmx6500M -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 \
-Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true \
-jar paper.jar --noguiغيّر قيمتي الذاكرة فقط بما يناسب سيرفرك. يحتوي توثيق Paper أيضًا على رابط لمولّد سكربتات يكتب سكربت التشغيل هذا نيابة عنك. وتصف الصفحة نفسها -XX:+UseTransparentHugePages بأنه تجربة للمستخدمين المتقدمين، لا يُستخدم إلا مع AlwaysPreTouch، وتقول إن فريق Paper لم يقِس تأثيره على Minecraft. اتركه ما لم تكن تنوي قياسه بنفسك.
إذا اشتبهت في مشكلة في الذاكرة، ففعّل تسجيل جمع المهملات. يشير Paper إلى أنه لا يضر بالأداء وأن ملفات السجل تبقى في حدود 5 MB تقريبًا:
# add to the java line (Java 11 and newer) to log garbage collection
-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1Mقِس قبل أن ترقّي
لدى Paper أوامر للرقمين المهمين، مذكورة في مرجع الأوامر الخاص به:
/tps # ticks per second over 1, 5 and 15 minutes (target 20.0)
/mspt # milliseconds per tick over 5, 10 and 60 seconds (keep under 50)
/spark # Paper's built-in profiler, which supersedes both# total and available memory on the server, in MB
free -m
# resident memory of the Java process, in KB
ps -o pid,rss,args -C java- TPS أقل من 20 وMSPT أعلى من 50، والذاكرة سليمة: المعالج هو الحد. اخفض
simulation-distance، وابحث عن المزارع أو الإضافات الثقيلة عبر/spark، أو انتقل إلى نواة أسرع. - عمليات الجمع تعمل باستمرار، أو العملية تُقتل: heap صغير جدًا أو مضبوط قريبًا جدًا من إجمالي ذاكرة السيرفر. أصلح الفارق أولًا، ثم أضف ذاكرة.
- كلاهما سليم لكن اللاعبين يشتكون من التأخير: افحص مسار الشبكة واتصال اللاعب نفسه قبل أن تغيّر شيئًا في السيرفر.
لا تقلق عندما يُظهر ps أن عملية Java تستخدم أكثر من -Xmx. هذه الزيادة هي الذاكرة التي تحتاجها Java خارج heap، وهي سبب ترك فارق من 1000 إلى 1500 MB. ومع -Xms مساوية لـ -Xmx وتفعيل AlwaysPreTouch، تحجز العملية أيضًا heap كاملًا عند البدء، لذا فإن ارتفاع الرقم بعد الإقلاع مباشرة أمر متوقع ولا يعني وجود تسرّب. راقب بدلًا من ذلك كيف يتغير الرقم على مدى ساعات من اللعب.
Minecraft على Evorxa
تعمل استضافة Minecraft لدى Evorxa على خطط VPS بأنوية مشتركة وخطط VDS بأنوية مخصصة عالية التردد؛ والنوع الثاني يناسب حمل Minecraft المعتمد على خيط واحد. تبدأ الخطط من $2.99 شهريًا، وتُدفع مسبقًا شهريًا أو لستة أشهر أو سنويًا، وتمنحك صلاحيات root ووصول SSH لضبط الخيارات (flags) المذكورة أعلاه. تعمل السيرفرات في منطقة واحدة هي Eygelshoven بهولندا، وتكون صورة Linux العادية جاهزة عادةً خلال دقيقة تقريبًا.
المصادر
المعلومات في هذا الدليل مأخوذة من هذه الصفحات.