All the Mods 10 სერვერი სამი რამისგან შედგება: პაკეტის ServerFiles zip-ი, Java 21 და ერთი გამშვები სკრიპტი. ამ წერილის წერის დროს მიმდინარე რელიზია ATM10 8.2: Minecraft 1.21.1, NeoForge 21.1.251 და 464 მოდი სერვერის საქაღალდეში. zip-ი დაახლოებით 1,2 GB-ია და NeoForge-ის ინსტალერიც უკვე შიგნითაა. ფაილებს ამოარქივებ, უშვებ startserver.sh-ს, ეთანხმები EULA-ს და პირველი გაშვების დასრულებას რამდენიმე წუთი ელოდები. მეხსიერება user_jvm_args.txt-ში იწერება, სადაც ნაგულისხმევად -Xms4G -Xmx8G დგას. პატარა ჯგუფისთვის 8 GB heap მინიმუმად ჩათვალე და კონტეინერს ამაზე სულ ცოტა 2 GB-ით მეტი მიეცი. პრობლემების უმეტესობა იქიდან მოდის, რასაც სკრიპტი შენს უკითხავად აკეთებს, და სწორედ ამას განვიხილავთ ქვემოთ.
ATM-ის უფრო ფართო სურათი (რა პაკეტები არსებობს, როგორ ანელებს chunk loading სერვერს თვეების განმავლობაში, როგორ განვაახლოთ უსაფრთხოდ) აღწერილია წერილში All the Mods სერვერი: ATM10 და ATM9. მოდპაკების სერვერებზე ზოგადად, მაგალითად კლიენტის ექსპორტიდან სერვერის აწყობაზე, იხილე მოდპაკის სერვერი CurseForge-იდან ან Modrinth-იდან. აქ უფრო სიღრმეში შევდივართ თავად ATM10-ის ინსტალაციაში: რას აკეთებს თითოეული ფაილი, რას აკეთებს სკრიპტის თითოეული ხაზი და რა უნდა შეცვალო.
სწორი სერვერის ფაილების ჩამოტვირთვა#
ATM10 CurseForge-ზეა გამოქვეყნებული. თითოეულ რელიზს მთავარ ფაილად კლიენტის პაკეტი აქვს, ხოლო სერვერის პაკეტი ცალკე, დამატებით ფაილად არის მიმაგრებული და ჰქვია ServerFiles-<version>.zip. 8.2-ისთვის ეს არის ServerFiles-8.2.zip. პაკეტის Files ჩანართზე გახსენი რელიზი, რომელზეც შენი მოთამაშეები არიან და Additional Files-ში მოძებნე. სერვერს კლიენტის zip-იდან ნუ ააწყობ. სერვერის ფაილებს მხოლოდ-კლიენტის მოდები უკვე ამოღებული აქვს და მათთან ერთად სკრიპტებიც და JVM არგუმენტების ფაილიც მოდის.
ვერსია ზუსტად უნდა დაემთხვეს. ATM10-ს გამოსვლის შემდეგ ათეულობით რელიზი ჰქონდა (5.x, 6.x, 7.x და ახლა 8.x), ახალი რელიზის გამოჩენისას კი CurseForge-ის აპი მოთამაშეების კლიენტებს ავტომატურად აახლებს. 8.1-ზე მომუშავე სერვერი 8.2-ზე მყოფ მოთამაშეებს არ შეუშვებს, ან შეუშვებს და შემდეგ შეუსაბამო კონტენტის გამო შეცდომას მისცემს. ვერსია Discord-ში ჩაწერე და სერვერიც და მოთამაშეებიც ერთსა და იმავე დღეს განაახლეთ.
არსებობს ცალკე სერვერის ფაილებიანი სპინ-ოფებიც. ATM10 Lite უფრო პატარა პაკეტია, ATM10 To The Sky skyblock-ის ვარიანტია, ახლა კი Aeronautics-ის გამოცემაც არსებობს. ქვემოთ მოცემული ყველაფერი მათზეც მუშაობს, მაგრამ ვერსიების ნომრები, მოდების რაოდენობა და მეხსიერების მოთხოვნები განსხვავებულია. რომელ zip-საც არ უნდა ჩამოტვირთავ, წაიკითხე მისი გამშვები სკრიპტი და ნუ დაუშვებ, რომ ის ამ წერილისას ემთხვევა.
რა დევს 8.2-ის zip-ში:
| გზა | რა არის ეს |
|---|---|
mods/ | 464 jar-ი, მხოლოდ-კლიენტის მოდები უკვე ამოღებულია |
config/, defaultconfigs/ | პაკეტის კონფიგურაცია; defaultconfigs/ ქმნის თითო სამყაროს კონფიგებს |
kubejs/ | რეცეპტებისა და loot-ის ცვლილებები, რომლებზეც პაკეტია დამოკიდებული |
datapacks/ | პაკეტის datapack-ები, რომლებიც ახალ სამყაროებში იკოპირება |
neoforge-21.1.251-installer.jar | ლოუდერის ინსტალერი, ამიტომ ცალკე ჩამოტვირთვა არ გჭირდება |
startserver.sh, startserver.bat | ინსტალაციისა და გაშვების სკრიპტები Linux-ისა და Windows-ისთვის |
user_jvm_args.txt | მეხსიერებისა და garbage collector-ის დროშები |
server-icon.png | სერვერების სიაში გამოჩენილი ხატულა |
eula.txt, server.properties და სამყარო არ არის. სამივეს პირველი გაშვება ქმნის.
NeoForge და Java 21#
Minecraft 1.21.1-ს Java 21 სჭირდება და ATM10-ის სკრიპტი ამას ამოწმებს. ის უშვებს java -fullversion-ს, იღებს მთავარ ვერსიას და 21-ზე დაბალზე გაშვებაზე უარს ამბობს შეტყობინებით Minecraft 1.21 requires Java 21 - found Java 17. თუ Java საერთოდ არ არის, ნახავ Minecraft 1.21 requires Java 21 - Java not found. შემოწმება არის -ge 21, ამიტომ უფრო ახალი Java-ც გაივლის. მაგრამ 1.21.1-ის NeoForge სწორედ 21-ზეა აგებული და გატესტილი, ამიტომ Java 21 გამოიყენე. თუ მანქანაზე რამდენიმე Java დგას, სკრიპტს სწორზე მიუთითე გარემოს ცვლადით ATM10_JAVA, რომელშიც java ბინარის სრული გზა უნდა ჩაწერო.
ლოუდერის ვერსია სკრიპტის პირველ ხაზებშია ჩაკეტილი:
NEOFORGE_VERSION=21.1.251# To use a specific Java runtime, set an environment variable named ATM10_JAVA# To disable automatic restarts, set an environment variable named ATM10_RESTART to false.# To install the pack without starting the server, set ATM10_INSTALL_ONLY to true.NeoForge-ს თვითნებურად ნუ განაახლებ. ყოველი ATM რელიზი კონკრეტულ ბილდზეა მიბმული. 8.1-დან 8.2-ზე გადასვლისას 21.1.249 შეიცვალა 21.1.251-ით და პაკეტი სწორედ ამ ბილდზე გატესტეს. უფრო ახალი ბილდი ხშირად პრობლემის გარეშე მუშაობს, მაგრამ როცა არ მუშაობს, იღებ კრაშს, რომელიც პაკეტის ამ ვერსიაზე სხვას არ უნახავს. NeoForge-ის სერვერის გაშვება განმარტავს ინსტალერს და მის მიერ შექმნილ libraries/-ის სტრუქტურას. ATM სერვერისთვის წესი მარტივია: გაუშვი ის ბილდი, რომელსაც სკრიპტი ასახელებს.
რას აკეთებს სინამდვილეში startserver.sh#
სკრიპტი მოკლეა. ერთხელ წაკითხვა პირველი გაშვების პრობლემების უმეტესობას ხსნის. თანმიმდევრობით:
- ამოწმებს, არის თუ არა Java.
- თუ
libraries/საქაღალდე არ არის, აყენებს NeoForge-ს. იყენებს თან მოყოლილ ინსტალერს, ხოლო თუ არ არის,maven.neoforged.net-იდან ჩამოტვირთავს და უშვებსjava -jar neoforge-21.1.251-installer.jar -installServer. - თუ
server.propertiesარ არის, წერს მას ხუთი ხაზით:allow-flight=true,motd=All the Mods 10,max-tick-time=180000,simulation-distance=5დაview-distance=8. - თუ
ATM10_INSTALL_ONLY=true, აქ ჩერდება. - ამოწმებს, რომ Java სულ ცოტა 21-ია.
- სერვერს ციკლში უშვებს. პროცესის დასრულებისას 10 წამს ელოდება და თავიდან უშვებს, თუ
ATM10_RESTART=falseარ არის.
გასაგებად ყველაზე მნიშვნელოვანი გაშვების ხაზია:
java @user_jvm_args.txt \ @libraries/net/neoforged/neoforge/21.1.251/unix_args.txt noguiserver jar არ არსებობს. @-ით დაწყებული არგუმენტები Java-ს არგუმენტების ფაილებია. პირველში შენი მეხსიერებისა და GC-ის დროშებია. მეორეს ინსტალერი წერს და მასში ზუსტად ამ NeoForge ბილდის classpath-ი და მთავარი კლასია. ვერსიის ნომერი ამ გზის ნაწილია და სწორედ ეს იწვევს განახლების პრობლემას, რომელსაც ქვემოთ, კრაშებში, განვიხილავთ.
სამი ქცევა ხშირად აბნევს ხალხს:
- ნაგულისხმევი მნიშვნელობები მხოლოდ ერთხელ იწერება. თუ
server.propertiesუკვე არსებობს, მაგალითად ჰოსტინგის ნაგულისხმევი ინსტალაციიდან ან წინა სერვერიდან, სკრიპტი მას არ ეხება. შედეგად არ გექნებაallow-flight=trueდა 180-წამიანი watchdog-ი, პირველივე jetpack-ით ფრენა კი მოთამაშეს ფრენისთვის გააგდებს. ეს ხაზები შენ თვითონ დაამატე. - რესტარტის ციკლს არ აინტერესებს, რატომ გაჩერდა სერვერი. პირველ გაშვებაზე სერვერი წერს
eula.txt-ს მნიშვნელობითeula=falseდა გამოდის, სკრიპტი კი ყოველ 10 წამში თავიდან უშვებს, სამუდამოდ, სანამ ამ ფაილს არ შეცვლი. პანელში, რომელსაც საკუთარი რესტარტის მართვა აქვს, სკრიპტის ციკლი და პანელის ციკლი ერთმანეთსაც შეიძლება შეეწინააღმდეგოს. როცა პროცესს პანელი ან systemd აკონტროლებს, დააყენეATM10_RESTART=falseდა რესტარტი ზედამხედველს მიანდე. - `set -eu`-ის პირობებში სკრიპტი შეცდომაზე ჩერდება, Java-ს ხაზის გარდა, სადაც გასვლის კოდი განზრახ ჩერდება, რომ ციკლი გაგრძელდეს. ამიტომ კრაშის მქონე სერვერი ჩუმად ყოველ 10 წამში თავიდან იწყება. აპტაიმს კი არა, ლოგს უყურე.
სუფთა პირველი ინსტალაცია საკუთარ Linux მანქანაზე ასე გამოიყურება:
$ mkdir -p /srv/atm10 && cd /srv/atm10$ unzip ~/ServerFiles-8.2.zip$ chmod +x startserver.sh$ ATM10_INSTALL_ONLY=true ./startserver.sh # install NeoForge, write properties$ echo "eula=true" > eula.txt # after reading the EULA$ ATM10_RESTART=false ./startserver.shჯერ ინსტალაცია და რეალურ გაშვებამდე EULA-ზე თანხმობა რესტარტის ციკლს გვერდს აუვლის და სერვერი პირდაპირ სამყაროს აგებას შეუდგება.
user_jvm_args.txt, ხაზ-ხაზ#
ATM10 ამ ფაილს ასე აწვდის, კომენტარების გარეშე:
-Xms4G-Xmx8G-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ესენი Minecraft-ისთვის მორგებული, ფართოდ გავრცელებული G1 დროშებია, რომლებსაც ხშირად Aikar-ის დროშებს ეძახიან. შეხება მხოლოდ ორი ხაზისთვის გჭირდება.
- `-Xmx` heap-ის ზედა ზღვარია. სწორედ ეს რიცხვი წყვეტს, ეტევა თუ არა პაკეტი. მოთამაშეების მომატებისას ან დაძველებული სამყაროსთვის გაზარდე. არასოდეს დააყენო მანქანის ან კონტეინერის მთელ მეხსიერებაზე.
- `-Xms` საწყისი heap-ია.
-XX:+AlwaysPreTouch-თან ერთად JVM გაშვებისას-Xms-ის მთელ მოცულობას იკავებს და ეხება. მიწოდებული მნიშვნელობებით 4 GB დაკავებულია, სანამ ერთი მოდიც ჩაიტვირთება.-Xms-ის-Xmx-ის ტოლად დაყენება გავრცელებულია და ზომის ცვლილებას ერიდება, მაგრამ მაშინ მთელი heap პირველივე წამიდან დაკავებულია. დარწმუნდი, რომ კონტეინერს ნამდვილად აქვს ამდენი პლუს დამატებითი მეხსიერება, თორემ სერვერი ერთი საათის შემდეგ კი არა, გაშვებისასვე გაითიშება. - G1 დროშებს ნუ შეეხები, თუ არ ზომავ. 6-დან 16 GB-მდე heap-ისთვის ისინი გონივრულია. თუ 12 GB-ს გადაცდები, ზოგი გზამკვლევი
G1HeapRegionSize-ს16M-მდე და new-generation პროცენტებს ზრდის, მაგრამ ეს მორგების ნაბიჯია და არა lag-ის გამოსწორება. JVM-ის დროშები და Java-ს ვერსიები განმარტავს, რას ცვლის თითოეული.
მეხსიერების დაყენების ადგილზე ერთი წესი არსებობს. თუ პანელი ან wrapper-ი -Xmx-ს ბრძანების ხაზშიც გადასცემს, ორი მნიშვნელობა ეჯიბრება ერთმანეთს და შედეგი თანმიმდევრობაზეა დამოკიდებული. აირჩიე ერთი ადგილი, ჩვეულებრივ ეს ფაილი, და მეორე მოხსენი.
RAM და CPU მოთამაშეების რაოდენობის მიხედვით#
მიწოდებული -Xmx8G პაკეტის ავტორებისთვის სამუშაო მინიმუმია და გამოცდილება ამას ადასტურებს. 8 GB-ზე ნაკლებზე ATM10 ჩაირთვება, მაგრამ როგორც კი მოთამაშეები დაიფანტებიან, garbage collection განუწყვეტლივ მუშაობს და პირველივე დატვირთული საღამო out-of-memory კრაშით მთავრდება. კონტეინერს heap-ზე მეტი სჭირდება, რადგან Java მეხსიერებას metaspace-ისთვისაც (464 მოდის კლასები), thread stack-ებისთვის, direct buffer-ებისთვის და JIT-ისთვისაც ხარჯავს. ამ ზომის პაკეტზე ეს დამატებითი მოცულობა დაახლოებით 1,5-დან 2,5 GB-მდეა.
| მოთამაშეები | -Xmx user_jvm_args.txt-ში | კონტეინერი ან გეგმა |
|---|---|---|
| 1-3, ახალი სამყარო | 8G | 10 GB |
| 4-8, რამდენიმე ბაზა | 10G | 12-14 GB |
| 8-15, დაძველებული სამყარო | 12G | 14-16 GB |
| 15+ ან მძიმე ავტომატიზაცია | 14G+ | 16 GB+, და ჯერ profile გააკეთე |
ცხრილის რამდენიმე შენიშვნა:
- მოთამაშეებზე მეტი სამყარო ჯდება. ერთ ადგილას მდგარი მოთამაშე ცოტა ჯდება. ახალ რელიეფს მაგენერირებელი მოთამაშე ან ბაზა, სადაც Mekanism-ისა და AE2-ის მანქანები მთელი დღე-ღამე force-loaded რეჟიმშია, ბევრს ჯდება. ოთხ მოთამაშეს დიდი ქარხნებით შეიძლება იმაზე მეტი მეხსიერება დასჭირდეს, ვიდრე ათს, რომლებიც უმეტესად წინასწარ დაგენერირებულ მიწაზე მოგზაურობენ.
- CPU მეორე ნახევარია. Minecraft-ის მთავარი tick ერთი thread-ია, ამიტომ ერთი ბირთვის სიჩქარე წყვეტს, რამდენ ავტომატიზაციას გაუძლებს სერვერი 20 TPS-ზე დაცემამდე. დამატებითი ბირთვები chunk-ების გენერაციას, garbage collection-სა და ქსელს ეხმარება. დატვირთული სერვერისთვის გათვალე სულ ცოტა ორი სწრაფი ბირთვი, უკეთესია სამი ან მეტი.
- მეტი heap ყოველთვის უკეთესი არ არის. 20 GB heap სერვერზე, რომელიც 9 GB-ს იყენებს, მხოლოდ თითოეულ სრულ collection-ს ამახანგრძლივებს. მოცულობა spark-ის ანგარიშით განსაზღვრე და არა გეგმის ზომით. რამდენი RAM სჭირდება Minecraft სერვერს განმარტავს, როგორ წაიკითხო რიცხვები.
RE:NODE-ზე ATM10-ს ერგება Minecraft-ის გეგმები Pro 10 GB-ით და Premium 14 GB-ით, 2,5 და 3,5 vCPU-თი. Pro პატარა ჯგუფისთვის სწორია -Xmx8G-ით. Premium დატვირთულ სერვერს ერგება -Xmx12G-ით. 2-დან 6 GB-მდე გეგმები ამ პაკეტს ვერ გაუშვებს და ამას უკეთ პირდაპირ ვამბობთ, ვიდრე ამისთვის რომელიმეს გავყიდით. თუ კონტეინერი მეხსიერების ლიმიტს მიაღწევს, kernel მას აჩერებს და სერვერი swap-ში ჩაყინვის ნაცვლად სუფთად იწყება თავიდან, ამიტომ -Xmx-სა და გეგმას შორის დარჩენილი მარაგი ყველაზე მნიშვნელოვანი პარამეტრია.
პანელზე ინსტალაცია#
ჰოსტინგის პანელზე ნაბიჯები იგივეა, ოღონდ მათ shell-ის ნაცვლად ფაილების მენეჯერით და კონსოლით ასრულებ. RE:NODE-ის Minecraft ხაზი აყენებს Paper-ს შესაბამისი Java-ს ვერსიით, მიღებული EULA-თი და დაგენერირებული სამყაროთი. ATM10 სერვერი ამ ინსტალაციას შენი ატვირთული ფაილებით ცვლის. მოდპაკის ინსტალერი არ არსებობს და პანელზე არაფერი კითხულობს CurseForge-ის პაკეტს.
- გააკეთე ნაგულისხმევი ინსტალაციის backup-ი, შემდეგ გააჩერე სერვერი.
- წაშალე Paper-ის ზედმეტი ფაილები: server jar-ი,
plugins/და დაგენერირებული სამყაროს საქაღალდეები. - ფაილების მენეჯერით ან SFTP-ით ატვირთე
ServerFiles-8.2.zipდა იქვე ამოარქივე. - არსებულ
server.properties-ში დაამატეallow-flight=trueდაmax-tick-time=180000, რადგან სკრიპტი მათ არსებულ ფაილში არ ჩაწერს. - მეხსიერება დააყენე
user_jvm_args.txt-ში ისე, რომ-Xmxგეგმაზე 2 GB-ით ან მეტით დაბლა იყოს. - დარწმუნდი, რომ გაშვება ATM სკრიპტს ან იმავე
java @user_jvm_args.txt @libraries/...ხაზს უშვებს,ATM10_RESTART=false-ით, რომ რესტარტებს პანელი მართავდეს. თუ Startup ჩანართი საჭირო პარამეტრს არ გვიჩვენებს, გახსენი ticket-ი და მოითხოვე. - გაუშვი სერვერი და კონსოლს უყურე
Done-მდე.
SFTP და ფაილების მენეჯერი შეიცავს დაკავშირების დეტალებს. 1,2 GB-იანი ფაილის ატვირთვა SFTP-ით უფრო საიმედოა, ვიდრე ბრაუზერით ნელ კავშირზე.
სამყაროს წინასწარი გენერაცია#
ATM10-ის სერვერის ფაილებში spark-ი და FTB Chunks შედის, წინასწარი გენერატორი კი არა. ამ პაკეტში რელიეფი ძვირია: დამატებითი მადნები, მოდებიანი სტრუქტურები და რამდენიმე დამატებული განზომილება. jetpack-ებით ან elytra-თი მოგზაური მოთამაშეები chunk-ებს უფრო სწრაფად აგენერირებენ, ვიდრე ერთ tick thread-ს შეუძლია გადაამუშაოს, და ჩაჭედვას ყველა გრძნობს. წინასწარი გენერაცია ამ სამუშაოს იმ დროს გადაიტანს, როცა არავინ არის ონლაინ.
Chunky-ს აქვს NeoForge-ის ბილდი 1.21.1-ისთვის და მხოლოდ სერვერზე მუშაობს, ამიტომ მოთამაშეებს არ სჭირდებათ. jar-ი ჩაყარე mods/-ში, გადატვირთე და გაუშვი:
/chunky world minecraft:overworld/chunky center 0 0/chunky radius 4000/chunky start/chunky worldborder/chunky pause და /chunky continue საშუალებას გაძლევს თამაშის დასაწყისში გააჩერო და ღამით გააგრძელო. პროგრესი რესტარტს უძლებს. ATM10-ზე 4000-ბლოკიანი რადიუსი წუთებს კი არა, საათებს მოითხოვს და region ფაილები რამდენიმე გიგაბაიტით იზრდება. გაუშვი ისე, რომ არავინ იყოს ონლაინ, და დაწყებამდე შეამოწმე თავისუფალი დისკი. /chunky world-ზე tab-ით ავტოშევსება გამოიყენე, რომ Nether-ი, End-ი და ის მოდებიანი განზომილებები დააგენერირო, რომლებშიც შენი მოთამაშეები ცხოვრობენ. სამთო განზომილებებს ნუ შეეხები, რადგან ისინი დროდადრო ნულდება. სამყაროს საზღვრები და წინასწარი გენერაცია უფრო დეტალურად აღწერს დროსა და ფაილების ზომებს.
ასევე შეამოწმე item-clear პარამეტრი. პაკეტს მოყვება Crash Utilities, რომელსაც config/crashutilities-server.toml-ში item clear ჩართული აქვს. ყოველ 5 წუთში, თუ ჩატვირთულია 1000-ზე მეტი დაგდებული ნივთი, ის ჩატში აფრთხილებს და ყველას შლის. ეს entity-ების lag-ს ამცირებს. ამავე დროს მოთამაშეებს აკვირვებს, რომლებსაც დაგდებული დასტა ეკარგებათ, ამიტომ აცნობე მათ, ან გაზარდე maximum, თუ შენი ჯგუფი ნივთების შენარჩუნებას ამჯობინებს.
კრაშების გავრცელებული მიზეზები და გამოსწორება#
კონსოლი ხაზის შუაში წყდება და კრაშის ანგარიში არ არის. პროცესი გარედან მოკლეს, თითქმის ყოველთვის მეხსიერების გამო. -Xmx პლუს დამატებითმა მოცულობამ კონტეინერის ლიმიტს გადააჭარბა, ხშირად სამყაროს გენერაციისას ან დიდი -Xms-ით გაშვებისას. შეამცირე heap-ი ან უფრო დიდ გეგმაზე გადადი. Java-ს ნამდვილი out-of-memory შეცდომა კი ბეჭდავს java.lang.OutOfMemoryError-ს და ჩვეულებრივ კრაშის ანგარიშსაც წერს.
`Error: could not open 'libraries/net/neoforged/neoforge/<version>/unix_args.txt'`. პაკეტი განაახლე რელიზზე, რომელსაც NeoForge-ის უფრო ახალი ბილდი აქვს. სკრიპტმა არსებული libraries/ საქაღალდე დაინახა, ინსტალერი გამოტოვა და შემდეგ ისეთი ბილდის გაშვება სცადა, რომელიც დაყენებული არ არის. ინსტალერი ხელით გაუშვი (java -jar neoforge-<version>-installer.jar -installServer), ან წაშალე libraries/ და გაუშვი სკრიპტი, რომ თავიდან დააყენოს.
`has been compiled by a more recent version of the Java Runtime (class file version 65.0)`. სერვერი Java 17-ზე (class file version 61) მუშაობს. class ვერსია 65 Java 21-ია. შეცვალე runtime-ი, ან დააყენე ATM10_JAVA.
სერვერი ყოველ 10 წამში თავიდან იწყება და ვერავინ შედის. ან eula.txt-ში ისევ false წერია, ან სერვერი გაშვებისას ვარდება და სკრიპტის ციკლი ამას მალავს. ზევით ახვიე რესტარტის შეტყობინების შემდეგ პირველ შეცდომამდე.
`Failed to bind to port` გაშვებისას. სხვა პროცესი, ხშირად ორმაგი რესტარტის ციკლის გამო დარჩენილი მეორე ასლი, პორტ 25565-ს იკავებს. გააჩერე ყველაფერი, დარწმუნდი, რომ არაფერი მუშაობს, და გაუშვი ერთხელ. პანელზე გამოიყენე გეგმით მინიჭებული პორტი და არა გზამკვლევიდან გადმოწერილი მნიშვნელობა.
watchdog-ი სერვერს მძიმე გენერაციისას კლავს. ხედავ A single server tick took 60.00 seconds-ს და thread dump-ს. max-tick-time ისევ ვანილის 60000-ზეა, რადგან სკრიპტს მისი ნაგულისხმევი მნიშვნელობა არ ჩაუწერია. დააყენე 180000. არ დააყენო -1, რადგან ნამდვილად გაჭედილ სერვერს სამუდამოდ გაჭედილს ტოვებს.
სერვერი ვარდება, როცა ვინმე გარკვეულ ადგილას შედის. ამ chunk-ში block entity ყოველ tick-ზე ვარდება. კრაშის ანგარიში ასახელებს ბლოკსა და მის კოორდინატებს. აღადგინე ეს region backup-იდან, ან ბლოკი მოხსენი. Chunk-ის შეცდომები და სამყაროს დაზიანება ინსტრუმენტებს აღწერს, ხოლო კრაშის ანგარიშები განმარტებით გვიჩვენებს, როგორ ვიპოვოთ დამნაშავე მოდი stack trace-ში.
განახლების შემდეგ registry-ის ჩანაწერები აკლია. რელიზმა მოდი ამოიღო, სამყაროში კი მისი ბლოკები კვლავ დევს. NeoForge ჩატვირთვისას აფრთხილებს, დადასტურება კი მათ სამუდამოდ შლის. განახლებამდე წაიკითხე changelog-ი და განახლებამდე გაკეთებული backup-ი შეინახე, სანამ დარწმუნდები.
ეს backup-ი სერვერის საკუთარი დისკისგან განსხვავებულ ადგილას შეინახე. RE:NODE-ზე backup-ის სლოტები ყველა გეგმას მოყვება, მანქანის გარეთ ინახება, ერთი ღილაკით აღდგება და შეიძლება დაიბლოკოს, რომ როტაციამ განახლებამდე გაკეთებული ასლი არ წაშალოს, სანამ შენ ტესტირებას აკეთებ. Backup-ები, რომლებიც ნამდვილად აღდგება განმარტავს, რატომ უნდა გამოსცადო აღდგენა, სანამ ის დაგჭირდება.
FAQ#
რომელი Java ვერსია სჭირდება All the Mods 10 სერვერს?
Java 21. ATM10 Minecraft 1.21.1-ია და გამშვები სკრიპტი უფრო ძველზე გაშვებაზე უარს ამბობს. უფრო ახალი Java სკრიპტის შემოწმებას გაივლის, მაგრამ პაკეტი და NeoForge 21-ზეა გატესტილი, ამიტომ 21 გამოიყენე.
6 GB საკმარისია ATM10 სერვერისთვის?
რეალური თამაშისთვის არა. 6 GB კონტეინერში heap დამატებითი მოცულობის გათვალისწინებით დაახლოებით 4 GB-ზე უნდა იდგეს. პაკეტი ჩაიტვირთება, მაგრამ როგორც კი მოთამაშეები მოგზაურობას დაიწყებენ, garbage collection ყველაფერს იკავებს. გამოიყენე 8 GB heap, 10 GB-იან ან უფრო დიდ კონტეინერში.
NeoForge ცალკე უნდა ჩამოვტვირთო?
არა. 8.2-ის სერვერის ფაილებში NeoForge-ის ინსტალერი შედის და სკრიპტი პირველ გაშვებაზე თავად უშვებს. ხელახლა გაშვება მხოლოდ მაშინ გჭირდება, როცა პაკეტის განახლება NeoForge-ის ახალ ბილდზე გადადის.
სად შევცვალო სერვერის RAM?
user_jvm_args.txt-ში: -Xmx ხაზში ზედა ზღვარი, -Xms-ში საწყისი heap-ი. თუ შენი პანელი მეხსიერებას ბრძანების ხაზშიც აყენებს, გამოიყენე ერთი ან მეორე და არა ორივე.
შემიძლია სერვერის გაშვება რესტარტის ციკლის გარეშე?
კი. დააყენე გარემოს ცვლადი ATM10_RESTART=false და სერვერის გაჩერებისას სკრიპტიც დასრულდება. ეს ყოველთვის გააკეთე, როცა სერვერს უკვე პანელი, systemd ან სხვა ზედამხედველი რესტარტავს.
შეუძლიათ მოთამაშეებს ATM10 To The Sky-ით ან ATM10 Lite-ით შემოვიდნენ იმავე სერვერზე?
არა. თითოეული სხვადასხვა პაკეტია საკუთარი სერვერის ფაილებითა და მოდების სიით. მოთამაშეებს იგივე პაკეტი და იგივე ვერსია უნდა ჰქონდეთ, რაც სერვერს.


