RE:NODE

რესურსები11 წუთის საკითხავი

Project Zomboid სერვერის RAM: heap და გეგმა

Project Zomboid სერვერის მეხსიერება მოთამაშეების, გაფანტულობისა და მოდების მიხედვით, როგორ დააყენო -Xmx, რომ JVM კონტეინერში დაეტიოს, და sandbox პარამეტრები, რომლებიც ჩუმად ზრდის ხარჯს.

1 მკითხველი

Project Zomboid-ის გამოყოფილ სერვერს სჭირდება დაახლოებით 3 GB მეხსიერება ორიდან ოთხ მოთამაშემდე, რომლებიც ერთ ქალაქს იყოფენ vanilla პარამეტრებზე, 4-დან 6 GB-მდე რვიდან თექვსმეტ მოთამაშემდე, რომლებიც რუკაზე არიან გაფანტული, და 8-დან 10 GB-მდე თექვსმეტიდან ოცდათორმეტ მოთამაშემდე workshop-ის მოდებითა და რუკის მოდებით. რადგან სერვერი Java პროგრამაა, გეგმა პასუხის მხოლოდ ნახევარია: Java heap, რომელიც -Xmx-ით ყენდება, გეგმის დაახლოებით 70-დან 80 პროცენტამდე უნდა იყოს, რომ პროცესის დანარჩენი ნაწილი მის გარშემო დაეტიოს. გეგმა სწორად აირჩიე და heap არასწორად, და სერვერი მეხსიერების ამოწურვის გამო გაჩერდება, სანამ Java ჯერ კიდევ ფიქრობს, რომ ადგილი აქვს. ამის შემდეგ ყველაზე დიდი ფაქტორი მოთამაშეების რაოდენობა კი არა, გაფანტულობაა - ოთხი მოთამაშე ოთხ ქალაქში მეტი ჯდება, ვიდრე ათი ერთში.

რას ინახავს Zomboid სერვერი მეხსიერებაში#

სერვერი მთელ სამყაროს ყველა მოთამაშისთვის უშვებს, და მისი მეხსიერება ოთხი რამისგან შედგება.

  • ჩატვირთული რუკის cell-ები და chunk-ები ყოველი მოთამაშის გარშემო. რუკა cell-ების ბადეა, და სერვერი ყოველი მიერთებული მოთამაშის გარშემო არეს ჩატვირთულს ინახავს: შენობებს, ავეჯს, კონტეინერებს, იატაკზე დაყრილ ნივთებს, ტრანსპორტსა და ზომბებს ამ არეში. ერთ ქალაქში მყოფი მოთამაშეები ერთ ჩატვირთულ არეს იყოფენ. Muldraugh-ში, Riverside-სა და Louisville-ში გაფანტული მოთამაშეები სამს ტვირთავენ.
  • ზომბები. ზომბების პოპულაცია მთელ რუკაზე აღირიცხება, მოთამაშეების ახლოს მყოფი ზომბები კი სრულად სიმულირდება. პოპულაციის პარამეტრები განსაზღვრავს, რამდენი არსებობს; რამდენია ერთდროულად აქტიური, ჩატვირთული არეების რაოდენობას მისდევს.
  • ნივთები და ტრანსპორტი. ყოველი ნივთი ჩატვირთულ კონტეინერში ან იატაკზე, ყოველი მანქანა თავისი ნაწილებითა და საბარგულის შიგთავსით. მოთამაშეები აგროვებენ, და ბაზა ოცდაათი გატენილი ყუთით და გაძარცული მანქანების სადგომით ბევრი ობიექტია.
  • მოდები. Lua სკრიპტები, ნივთების განსაზღვრებები, ტექსტურები სერვერის საკუთარი აღრიცხვისთვის, ხოლო რუკის მოდებისთვის - cell-ების მთელი დამატებითი რეგიონები.

ეს ყველაფერი Java heap-შია, გარდა JVM-ის საკუთარი ხარჯისა, რომელიც მის გარეთაა და რის გამოც heap გეგმაზე პატარა უნდა იყოს.

RAM ჯგუფისა და სერვერის ტიპის მიხედვით#

სერვერიგეგმის მეხსიერება-Xmxშენიშვნები
2-4 მოთამაშე, vanilla, ერთი ქალაქი3 GB2gკომფორტული
8-16 მოთამაშე, გაფანტული4-6 GB3g - 4gჩვეულებრივი შემთხვევა
16-32 მოთამაშე, მოდები და რუკის მოდები8-10 GB6g - 7gრუკის მოდები ძვირი ნაწილია
მძიმედ მოდიფიცირებული, 100+ workshop ელემენტი10 GB და მეტი7g - 8gმოდების სია გაშვებამდე გატესტე

ცხრილი წაიკითხე იმის მიხედვით, სად იქნებიან მოთამაშეები, და არა მხოლოდ რამდენი. პატარა კერძო ჯგუფს, რომელიც მთლიანად ერთ კომპლექსში ცხოვრობს, პირველი რიგი სჭირდება, თუნდაც რვა ადამიანი იყოს. თორმეტკაციან საზოგადოებას, სადაც თითოეული სხვადასხვა ქალაქს იკავებს, მესამე სჭირდება, სანამ რაიმე მოდი დაყენდება.

Java heap-ის სწორად დაყენება#

სერვერს Java launcher-ი უშვებს, რომელიც JVM-ის არგუმენტებს სერვერის საქაღალდეში არსებული JSON ფაილიდან კითხულობს, 64-ბიტიან ინსტალაციებზე ProjectZomboid64.json-დან. Heap არის -Xms და -Xmx ჩანაწერები მის vmArgs სიაში:

ProjectZomboid64.json
{    "mainClass": "zombie/network/GameServer",    "classpath": ["."],    "vmArgs": [        "-Djava.awt.headless=true",        "-Xms2g",        "-Xmx4g"    ]}

რეალურ ფაილს ამაზე მეტი არგუმენტი აქვს, მათ შორის garbage collector-ის ოფციები, რომლებიც თამაშის build-ებს შორის განსხვავდება. შეცვალე მხოლოდ heap-ის ორი ხაზი და დანარჩენი ისე დატოვე, როგორც მოვიდა. Windows-ის batch launcher-ზე იგივე ორი flag StartServer64.bat-შია. პანელზე დაფუძნებულ ჰოსტზე heap ხშირად Startup ცვლადადაა გამოტანილი; თუ ასეა, ის გამოიყენე ფაილის რედაქტირების ნაცვლად, რადგან პანელმა შეიძლება ფაილი ხელახალი ინსტალაციისას გადაწეროს.

რას ნიშნავს ორი flag:

  • `-Xmx` არის heap-ის მაქსიმუმი. ეს არის რიცხვი, რომელიც მნიშვნელოვანია.
  • `-Xms` არის საწყისი heap. მოკრძალებული საწყისი მნიშვნელობა ნორმალურია; მისი -Xmx-ის ტოლად დაყენება JVM-ს აიძულებს ყველაფერი წინასწარ დაიკავოს, რაც უვნებელია, თუ მაქსიმუმი სწორია, და მეხსიერების გრაფიკს უფრო ადვილად წასაკითხს ხდის.

მაქსიმუმის წესი იგივეა, რაც ნებისმიერი JVM სერვერისთვის: დატოვე ადგილი heap-ის გარეთ. Metaspace ჩატვირთული კლასებისთვის, thread-ების stack-ები, JIT კომპილატორის კოდის cache და ნატიური ბუფერები ქსელისთვის - ყველა კონტეინერის ლიმიტში ითვლება და არცერთი არ არის -Xmx-ის შიგნით.

გეგმაგონივრული -XmxHeap-ის გარეთ დარჩენილი
3 GB2g~1 GB
4 GB3g~1 GB
6 GB4g - 4500m~1.5 GB
8 GB6g~2 GB
10 GB7g - 8g~2-3 GB

რა ზრდის მეხსიერებას ახალი მოთამაშეების გარეშე#

რამდენიმე sandbox და სერვერის პარამეტრი მეხსიერებას უფრო მეტად ცვლის, ვიდრე მოთამაშის დამატება. ისინი შენი სერვერის სახელის ორ ფაილშია - ნაგულისხმევად servertest.ini და servertest_SandboxVars.lua, Zomboid/Server საქაღალდეში.

ზომბების პოპულაცია

Zombies აყენებს პოპულაციის საერთო preset-ს, ZombieConfig ბლოკი კი მას აზუსტებს:

servertest_SandboxVars.lua
Zombies = 3,ZombieConfig = {    PopulationMultiplier = 1.0,    PopulationStartMultiplier = 1.0,    PopulationPeakMultiplier = 1.5,    PopulationPeakDay = 28,    RespawnHours = 72.0,},

პოპულაცია მეხსიერებასა და CPU-ს პირდაპირ ზრდის. ყურადღება მიაქციე პიკს: ნაგულისხმევებით სიმჭიდროვე 28-ე დღისთვის საწყისი დონის ერთნახევარჯერამდე იზრდება, ასე რომ მესამე დღეს შერჩეული სერვერი მეოთხე კვირაში შეიძლება არ ეყოს ისე, რომ არავის არაფერი შეუცვლია. ზომა პიკისთვის შეარჩიე. RespawnHours-იც მნიშვნელოვანია - respawn გასუფთავებულ ქალაქებს თავიდან ავსებს, ასე რომ ზომბები ხარჯად რჩებიან. მისი 0-ზე დაყენება respawn-ს თიშავს, და ბევრ მრავალმოთამაშიან სერვერზე ეს გეიმფლეის გაუმჯობესებაცაა და დატვირთვის ნელი შემცირებაც. SandboxVars-ის ახსნა ყველა ოფციას განიხილავს.

ნივთები იატაკზე

მოთამაშეები ნივთებს აგდებენ. თვეების განმავლობაში სერვერზე გროვდება დაგდებული ტანსაცმელი, ცარიელი ქილები და ჩანთები ყოველ ქუჩაზე, სადაც ხალხს გაუვლია. სერვერის ini-ს ამისთვის გასუფთავება აქვს:

servertest.ini
HoursForWorldItemRemoval=24.0WorldItemRemovalList=Base.Hat,Base.Glasses,Base.MaggotsItemRemovalListBlacklistToggle=false

HoursForWorldItemRemoval აყენებს, რამდენი საათი უნდა იდოს ნივთი იატაკზე, სანამ მოშორდება (0 გასუფთავებას თიშავს), WorldItemRemovalList კი ასახელებს, რომელ ნივთის ტიპებზე ვრცელდება წესი. ItemRemovalListBlacklistToggle=true-ით სია გამონაკლისებად იქცევა, ასე რომ სუფთავდება ყველაფერი, გარდა ჩამოთვლილი ნივთებისა. ეს აგრესიულია და შეუძლია მოაშოროს ის, რაც მოთამაშეებმა განზრახ დადეს, ამიტომ ჩართვამდე გამოაცხადე. ნაგულისხმევები შენს ფაილში შეამოწმე: ისინი build-ებს შორის იცვლებოდა.

ტრანსპორტი

რუკაზე ყოველი მანქანა მუდმივი ობიექტია ნაწილებით, მდგომარეობითა და შიგთავსით. CarSpawnRate sandbox-ის პარამეტრებში აყენებს, რამდენი ჩნდება; სერვერი, რომელიც გასართობად მას მაღლა აყენებს, ბოლოს ყოველ ქალაქში მანქანების სადგომებით რჩება, რომლებიც ჩატვირთულია ყოველთვის, როცა ვინმე ახლოსაა. მოთამაშეებიც აგროვებენ მათ. ბაზა ოცი მანქანით საბარგულის შიგთავსის ოცი ნაკრებია.

მოდები და რუკის მოდები#

Project Zomboid-ის მოდები Steam Workshop-იდან მოდის და სერვერის ini-ში workshop ID-ითა და mod ID-ით ჩამოითვლება. უმეტესობა მეხსიერებაში ცოტა ჯდება: ნივთების პაკეტი ან quality-of-life ცვლილება რამდენიმე Lua ფაილი და განსაზღვრებაა.

რუკის მოდები განსხვავებულია. ისინი სამყაროს ახალ cell-ებს უმატებენ - ახალ ქალაქებს, ახალ გზებს, ზოგჯერ მთელ ახალ რეგიონებს - და ეს cell-ები შეიცავს შენობებს, კონტეინერებსა და loot-ს, ისევე როგორც საბაზისო რუკა. ამას ორი შედეგი მოსდევს. სამყარო უფრო დიდია, ასე რომ მოთამაშეები უფრო შორს იფანტებიან და ერთდროულად მეტ არეს ტვირთავენ. ზოგი რუკის მოდი კი მჭიდროა, თითო შენობაზე მეტი კონტეინერითა და მეტი ნივთით, ვიდრე vanilla ქალაქებში. ზომის ცხრილის მესამე რიგი ძირითადად რუკის მოდების გამოა იქ.

პრაქტიკული რჩევა მოდიფიცირებული სერვერისთვის:

  1. მოდები ჯგუფებად დაამატე და თითოეულის შემდეგ მეხსიერებას უყურე. ასი ელემენტის კოლექციის debug შეუძლებელია, თუ სერვერს უცებ 2 GB მეტი დასჭირდა.
  2. ნებისმიერი მოდის ცვლილების შემდეგ სერვერი ერთხელ გაუშვი ისე, რომ ონლაინ არავინ იყოს, და შეამოწმე მისი უქმი მეხსიერება. ეს ახალი მინიმუმია.
  3. მოდების სია სერვერსა და კლიენტებს შორის იდენტური შეინარჩუნე. შეუსაბამობები მოთამაშეებს შემოსვლაში უშლის; მეხსიერება არ უჯდება, მაგრამ საათები უჯდება.

Project Zomboid-ის მოდები და workshop აღწერს ini-ს ხაზებსა და ჩატვირთვის რიგს.

როგორ დაამტკიცო, რომ პრობლემა მეხსიერებაა#

Zomboid-ის lag-ს ორი გავრცელებული მიზეზი აქვს და მათ სხვადასხვა გამოსწორება სჭირდება.

  1. უყურე მეხსიერების გრაფიკს ყველაზე დატვირთულ საათზე. JVM-ის ხერხისებური ხაზი, რომელიც იზრდება, collection-ის შემდეგ ეცემა და ისევ იზრდება, ნორმალურია. ხაზი, რომელიც ლიმიტთან ახლოს დგას პატარა ვარდნებით, ნიშნავს, რომ heap ზედმეტად სავსეა და collector-ი ბევრს მუშაობს ცოტას გასათავისუფლებლად.
  2. შეადარე heap-ს. თუ პროცესი კონტეინერის ლიმიტთან ახლოსაა, heap კი სავსე არ არის, -Xmx გეგმისთვის ზედმეტად მაღალია და მას heap-ის გარეთა ნაწილი აცილებს. შეამცირე -Xmx.
  3. CPU ცალკე შეამოწმე. ზომბების ხროვები, ბევრი ტრანსპორტი და რუკაზე გაფანტული მოთამაშეები მთავარი thread-ის დროსაც ჯდება. Rubber-banding, როცა მეხსიერება ლიმიტზე კომფორტულად დაბლაა, CPU-ა. CPU თუ RAM: რომელი აფერხებს შენს სერვერს მეთოდია, Project Zomboid-ის წარმადობა და lag-ი კი Zomboid-ის სპეციფიკურ მიზეზებს განიხილავს.
  4. მოძებნე კანონზომიერება restart-ებში. სერვერი, რომელიც ყოველ საღამოს ერთსა და იმავე დატვირთულ საათზე restart-ს აკეთებს და ლოგში არაფერია, მეხსიერებას ამოწურავს. სერვერი, რომელიც შემთხვევით დროს restart-ს აკეთებს Java-ს შეცდომებით ლოგში, მოდის ან დაზიანებული save-ის პრობლემაა.

RE:NODE-ზე სერვერი, რომელიც მეხსიერების ლიმიტს აღწევს, ჩერდება და სუფთად ეშვება თავიდან, swap-ზე დატოვების ნაცვლად. ეს არასაკმარის heap-ს აშკარას ხდის - მოულოდნელი restart და არა ნელი დაქვეითება - კონსოლის მეხსიერების გრაფიკი კი ზუსტად აჩვენებს, რამდენად ახლოს მივიდა ყოველი საღამო.

გაანგარიშებული მაგალითი: თორმეტი მოთამაშე, რომლებიც 4 GB-ს გადაიზრდებიან#

თორმეტკაციანი ჯგუფი vanilla სერვერს 4 GB-იან გეგმაზე იწყებს -Xmx3g-ით. პირველი ორი კვირა ყველაფერი რიგზეა: უმეტესობა ერთ Muldraugh-ის კომპლექსში ცხოვრობს და მარაგისთვის ერთად დადის. მესამე კვირაში სამი მოთამაშე Riverside-ში გადადის, ორი Rosewood-ის მახლობლად ფერმას იკავებს, საღამოს სესიები კი მოულოდნელი restart-ებით სრულდება და ლოგში არაფერია.

რიგ-რიგობით განვიხილოთ:

  1. Restart-ები მეხსიერებაა. ლოგში არაფერია, ყველაზე დატვირთულ საათზე, და პანელის გრაფიკი აჩვენებს, რომ თითოეულის წინ პროცესი 4 GB-იან ხაზს ებჯინება. ეს კონტეინერის ლიმიტია და არა Java-ს შეცდომა.
  2. Heap მთელი ამბავი არ არის. -Xmx3g-ით heap-ს მხოლოდ 3 GB-ის გამოყენება შეუძლია, ასე რომ დამატებითი წნევა heap-ის გარეთა მეხსიერებაა პლუს სავსე heap. იმავე გეგმაზე -Xmx-ის 3500m-მდე აწევა საქმეს გააუარესებდა, რადგან ადგილს წაართმევდა იმ ნაწილს, რომელიც პროცესს უკვე ლიმიტს აცილებს.
  3. მიზეზი გაფანტულობაა. ახლა ყოველ საღამოს ერთის ნაცვლად სამი ცალკე არეა ჩატვირთული, თითოეული საკუთარი ზომბებით, კონტეინერებითა და ტრანსპორტით, პოპულაცია კი 28-ე დღის პიკს უახლოვდება.
  4. ვარიანტები. გადადი 6 GB-იან გეგმაზე -Xmx4500m-ით, რომელიც გაფანტულობას კომფორტულად იტევს. ან დატოვე 4 GB და შეამცირე დატვირთვა: დაწიე PopulationPeakMultiplier, ჩართე ნივთების გასუფთავება და ჯგუფად შეთანხმდით, რომ ბაზები ერთ ან ორ ქალაქში დარჩეს. ბევრი ჯგუფი ცოტ-ცოტას ორივეს აკეთებს.
  5. ერთი კვირის შემდეგ შეამოწმე. სასარგებლო რიცხვი არის პიკი ყველაზე დატვირთული საღამოს სესიის დროს, მას შემდეგ, რაც პოპულაციის პიკი გაივლის. თუ ის ახალი ლიმიტის დაახლოებით 85%-ზე დაბლაა, გეგმა სწორია.

ეს ნიმუში იმდენად გავრცელებულია, რომ მისთვის დაგეგმვა ღირს. Zomboid სერვერის ზომა, რომელიც რვაზე მეტ ადამიანს უმასპინძლებს, იმ კვირისთვის უნდა შეირჩეს, როცა ჯგუფი გაიფანტება, და არა იმ კვირისთვის, როცა ჩამოდის.

დისკი და save-ის საქაღალდე#

მეხსიერება ის არის, რაც ფუჭდება; დისკი ის არის, რაც იზრდება. მრავალმოთამაშიანი სამყაროს save Zomboid/Saves/Multiplayer/<servername>/-ში ცხოვრობს და შეიცავს თითო map_X_Y.bin ფაილს რუკის ყოველ chunk-ზე, რომელსაც ვინმე ესტუმრა, პლუს მოთამაშეებისა და ტრანსპორტის მონაცემებს. სერვერი, რომელიც ერთი წელი მუშაობს კარგად ნავლი რუკით, გიგაბაიტებითა და ასობით ათასი პატარა ფაილით იზომება. მისი backup-ები ზრდასთან ერთად უფრო დიდხანს გრძელდება, და ერთის აღდგენა იმაზე ნელია, ვიდრე ხალხი ელის. Project Zomboid-ის რუკისა და სამყაროს reset აღწერს რუკის ნაწილების გადატვირთვას მოთამაშეების წაშლის გარეშე, რაც ასევე ძველი save-ის შემცირების პატიოსანი გზაა.

Project Zomboid-ის გეგმები RE:NODE-ზე 3 GB-დან იწყება და 10 GB-მდე მიდის, თვეში $9-დან, სამი პორტის გამოყოფით. ინსტალაციას Steam-ის ლოგინი სჭირდება, რომელიც Setup ჩანართზე შეგყავს, დონის აწევა კი ლიმიტს უკვე არსებულ სერვერზე ზრდის მისი თავიდან აწყობის გარეშე.

FAQ#

საკმარისია თუ არა 4 GB Project Zomboid სერვერისთვის?

დაახლოებით რვა მოთამაშემდე, რომლებიც ძირითადად ერთ არეში თამაშობენ, vanilla ან მსუბუქად მოდიფიცირებულ პარამეტრებზე - კი, -Xmx დაახლოებით 3g-ზე. თორმეტ მოთამაშეს, რომლებიც რამდენიმე ქალაქშია გაფანტული, ან ნებისმიერ რუკის მოდს 6 GB ან მეტი სჭირდება.

რაზე დავაყენო -Xmx?

გეგმის მეხსიერების სამოცდაათიდან ოთხმოც პროცენტამდე. ეს ადგილს ტოვებს JVM-ის heap-ის გარეთა მეხსიერებისთვის, რომელსაც კონტეინერიც ითვლის. 4 GB-იან გეგმაზე -Xmx3g; 8 GB-ზე -Xmx6g. არასოდეს დააყენო მთელ გეგმაზე.

რატომ იყენებს ჩემი Zomboid სერვერი მეოთხე კვირაში მეტ RAM-ს?

დიდი ალბათობით, პოპულაციის ნაგულისხმევი პიკის გამო: PopulationPeakMultiplier 1.5-ზე და PopulationPeakDay 28-ზე, ზომბების რაოდენობა პირველი თვის განმავლობაში იზრდება. ამას ემატება მოთამაშეების გაფანტვა და ნივთებისა და ტრანსპორტის დაგროვება. ზომა პიკისთვის შეარჩიე და არა პირველი კვირისთვის.

იყენებენ თუ არა რუკის მოდები ბევრ RAM-ს?

უმეტეს მოდზე მეტს. ისინი სამყაროს cell-ებს უმატებენ, ასე რომ მოთამაშეები უფრო შორს იფანტებიან და სერვერი ერთდროულად მეტ არეს ტვირთავს, მჭიდრო რუკის მოდებს კი თითო შენობაზე მეტი კონტეინერი და ნივთი აქვთ. სერვერი რამდენიმე რუკის მოდით 8 GB-სა და მეტის დიაპაზონს ეკუთვნის.

ეხმარება თუ არა სერვერის restart?

ის JVM-ს სუფთა heap-ს უბრუნებს და მისი განრიგით გაკეთება ღირს, ჩვეულებრივ დღეში ერთხელ. ის არ აშორებს ნივთებს, ტრანსპორტს ან ზომბებს, რადგან ისინი სამყაროშია შენახული. თუ restart-იდან ერთ საათში მეხსიერება ლიმიტზე დგას, სერვერს უფრო დიდი გეგმა ან უფრო მსუბუქი სამყარო სჭირდება.


კომენტარები

სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.

0/2000