Сервер Minecraft использует весь процессор

#java #minecraft #bukkit

#java #Minecraft #буккит

Вопрос:

Я хочу создать частный сервер minecraft (на 1.17.1) на моем Raspberry PI 4-b с 8 ГБ оперативной памяти.

Я установил 64-разрядный Ubuntu server и OpenJDK 17, но на самом деле, когда я запускаю свой сервер, он отвечает мне через несколько секунд.

Не могу идти в ногу! Сервер перегружен ? …

А также я проверяю процессы с помощью htop и вижу, что minecraft использует минимум около 30 потоков и использует весь мой процессор (400%), поэтому я попытался ограничить количество потоков, но это не работает… Кто-нибудь знает, что я могу сделать, чтобы оптимизировать мой сервер Minecraft, пожалуйста?

Также мой сценарий оболочки для запуска моего сервера minecraft :

 java -jar -server -Xmx4G -Xms1024M -XX:CICompilerCount=4 server.jar nogui
 

Кроме того, это мои тайминги :

  Pct Total  Pct Tick       Total             Avg     PerTick      Count     Event
  24.99%      24.90%     83.62 s        12.45 ms     1.0           6.7k     world - doTick
  19.14%      19.07%     64.03 s         9.54 ms     1.0           6.7k     world - tickEntities
   6.01%       5.99%     20.10 s         2.99 ms     1.0           6.7k     world_nether - doTick
   4.41%       4.39%     14.74 s         2.19 ms     1.0           6.7k     world_the_end - doTick
   1.39%    9,303.90%     4.65 s     4,651.95 ms     0.0           0.0k     World Save
   0.44%       0.43%      1.46 s         0.22 ms     1.0           6.7k     world_nether - tickEntities
   0.42%       0.41%      1.39 s         0.21 ms     1.0           6.7k     world - tracker
   0.20%       0.20%      0.68 s         0.10 ms     1.0           6.7k     world_the_end - tickEntities
   0.10%       0.10%      0.32 s         0.05 ms     1.0           6.7k     world_nether - tracker
   0.03%       0.03%      0.11 s         0.02 ms     1.0           6.7k     world_the_end - tracker
 

Комментарии:

1. Можете ли вы выполнить синхронизацию с /timings on then (через несколько минут) timings paste ?

2. Кроме того, о «у вас есть какие-либо идеи, где я могу задать свой вопрос?» есть spigot.org , об их разногласиях . Вы также можете загрузить плагин, чтобы управлять тем, какой плагин использует какие функции, но он показывает это в режиме реального времени (вопреки таймингам). Наконец, вы можете спросить об этом на Arqade (другом сайте сообщества SO, посвященном видеоиграм)

3. Я не знаю, как использовать команды таймингов … minecraft не повторяет эту команду, и я нахожу двоичную синхронизацию, но я не знаю, как ее использовать

4. Выполняйте /timings on . Затем подождите несколько минут, чтобы сервер получил данные для проверки того, какие ресурсы требуются. Затем, я думаю, около 10/15 минут (попробуйте подождать до задержки), которые вы сделаете /timings paste , это даст вам ссылку. Мне нужна эта ссылка, чтобы помочь вам рассказать, в чем именно проблема

5. Хорошо, итак, я выполнил команду, это заняло время, потому что она работает только на сервере spigot, а я был на bukkit… но вот ссылка: spigotmc.org/go/timings?url=opaqajisuj

Ответ №1:

Из ваших таймингов вашего сервера есть эта строка :

 1.39%   9,303.90%     4.65 s     4,651.95 ms     0.0           0.0k     World Save
 

Это представляет большую часть вашей проблемы. Например, это не из-за:

  • плагин: не могу исправить это быстро (сообщив об этом владельцу плагина / удалив его)
  • Не проблема с событием bukkit
  • Не помеченный объект (слишком много объектов)
  • Слишком много оперативной памяти

Например, это из-за сохранения, что может создать эту проблему:

  • Оперативная память: 8Go может принимать более 50 игроков (включая плагины), так что явно нет.
  • Java: JDK 17 является последним, поэтому сложно иметь так много проблем, я не думаю
  • Процессор: Вы говорите об этом. Это возможно, но так как он может работать на этом типе продукта, он не должен быть таким, и не более 9 тыс.%.
  • Хранение: Я думаю, у вас плохое хранилище. Это не SSD-накопитель, поэтому ваш весь сервер ожидает его сохранения. Это можно проверить с помощью этой нити на spigotmc.

Как вы можете это исправить?

Это явно сложно без покупки нового хранилища.

Вы можете попробовать никогда не сохранять, за исключением случаев, когда, например, нет ни одного игрока.

Вы также можете попытаться уменьшить все функции, которые могут привести к экономии хранилища:

  • Обновление автосохранения bukkit.yml )
  • Расстояние рендеринга (дюйм server.properties )
  • Обновление исчезло из элемента, стрелка… (в spigot.yml )
  • Понизьте лимиты появления bukkit.yml )

Комментарии:

1. @OP Вам будет сложно запустить сервер на Raspberry pi 4-b, вам нужно будет уменьшить некоторые настройки по умолчанию (например, расстояние рендеринга фрагмента). Тайминги поддерживают проблему с хранилищем, но фактический процессор может поддерживать только 5 игроков. Рендеринг фрагментов — одна из самых дорогостоящих операций в minecraft

2. Да, но когда сервер загружается в оперативную память, тогда плеер не загружает много фрагментов (например, спасибо elytra), это нормально. Здесь сохранение занимает все, так что, возможно, он сможет сохранить ресурс с расстоянием рендеринга, но сотрадж кажется более важным

3. Средство визуализации мира не будет сохранять все фрагменты (или какие-либо конкретные фрагменты), загруженные в память по умолчанию. По мере перемещения игрока загружаются новые фрагменты, а старые сохраняются на диске. Вы правы, заявив, что это хранилище, но это не единственное узкое место, с которым здесь сталкиваются.

4. Я просто редактирую свой ответ, чтобы добавить больше информации об этом. Для меня, даже если да, расстояние рендеринга может создать проблему, даже если мы установим его как 1, у нас будет проблема, поэтому только при изменении хранилища сервер сможет иметь лучшие настройки

5. Я думаю, что мне не удается передать свою общую точку зрения: даже при смене хранилища этого будет недостаточно. Я предлагаю честно отказаться от использования pi и запустить его на своем собственном компьютере, если только использование pi не является какой-то личной проблемой. Слишком низкое значение расстояния рендеринга будет иметь недостаток другого типа (поспешное чтение / запись фрагментов во время перемещения), и, следовательно, его нельзя установить ниже, чем 3 в любом случае.