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

Я размещаю сервер через Google Compute Engine для различных целей, в первую очередь сервер Minecraft, и он получает много трафика и использования. Мы говорим о довольно постоянной загрузке ЦП на уровне 150%, 50 операций чтения / 10 операций записи на диск в секунду, и 600 вниз / 1700 сетевых пакетов в секунду, так что довольно мало использования.

Проблема, с которой я столкнулся, заключается в том, что, несмотря на то, что сервер полностью способен справиться с таким большим использованием, все еще есть проблемы с задержкой и / или обработка. Есть много моментов, когда совершенно неожиданно один процесс, который должен выполняться всего за одну десятую секунды, занимает 40 секунд или даже больше.

Вот возможные проблемы, которые мы уже рассмотрели, и решения, которые у нас есть уже введено:

  • Использование ЦП
    • Мы постоянно используем 100–250% ЦП с 4 виртуальными ЦП (поэтому у нас не должно быть никаких ограничений производительности).
  • Дисковый ввод-вывод
    • Максимальное количество операций чтения и записи в секунду составляет 80 и 30 операций записи в секунду, но мы используем твердотельные накопители с постоянным пределом случайных операций ввода-вывода в секунду, равным 1,5 КБ, так что это тоже не должно быть проблемой.
    • Максимальное значение для чтения и записи составляет 1,6 МБ. 75 МБ записи в секунду, но используйте твердотельные накопители с постоянным пределом пропускной способности 24 МБ / с.
  • Сеть
    • Максимальное количество полученных пакетов (в среднем 400) и отправлено 1700 пакетов (в среднем 800) в секунду. Я не уверен, как мы можем это улучшить, но я не понимаю, как это может быть проблемой, если сетевой провайдер - Google.
    • Максимально мы получаем 28 КБ и отправляем 280 КБ в секунду. Наш тест скорости сети показывает, что мы способны обрабатывать это значение в тысячи раз.
    • Это наименее вероятно связано с этим, поскольку большинство возникающих проблем связано с проблемами на стороне сервера.
    • Мы не можем выполнить какую-либо форму балансировки нагрузки путем разделения подключения пользователей, поскольку все они должны подключаться обратно к одному серверу, на котором размещен мир Minecraft.
  • RAM
    • У нас есть 5 ГБ оперативной памяти, выделенной для процессов, в которых возникают трудности. Это заставляет меня сомневаться в его причастности, поскольку мы редко используем больше половины этого.
  • Java
    • Наша серверная банка Minecraft, будучи Minecraft, написана на Java. Мы используем следующую версию Java:
       версия java "1.7.0_111"
      Среда выполнения OpenJDK (IcedTea 2.6.7) (7u111-2.6.7-1 ~ deb8u1)
      64-разрядная серверная виртуальная машина OpenJDK (сборка 24.111-b01, смешанный режим) 
    • Мы используем следующие параметры для выполнения jar-файла:
       -server -Xmx5G -Xms5G -Xmn2500M -XX: + UseConcMarkSweepGC -XX: + UseParNewGC - XX: + CMSIncrementalPacing -XX: ParallelGCThreads = 4 -XX: + AggressiveOpts 
    • Мы рассмотрели возможность того, что Java (и особенно Minecraft) просто плохо управляет памятью, но не знаем, как это исправить, если вообще сможем .

Как видите, мы приняли различные меры для уменьшения задержки и ограничения процессов, но у нас просто закончились идеи. Есть ли другой способ ограничения нашего процесса, который мы упустили? или эта проблема связана с программным обеспечением, которое мы размещаем?

0
задан 2 October 2016 в 17:03
1 ответ

Следует учитывать несколько моментов:

a) Виртуальные машины GCE имеют ограничения выходной пропускной способности сети, как описано здесь . В соответствии с этим ограничением учитываются операции ввода-вывода PD и сетевой трафик. Для ВМ с 4 ядрами ограничение составляет 8 Гбит / с.

б) Максимальные устойчивые IOPS дисков GCE задокументированы в этой статье . Использование локального SSD может повысить вашу производительность, но информация на этих дисках недолговечна. Другими словами, данные в Local SSD сохраняются только до тех пор, пока вы не остановите или не удалите виртуальную машину.

c) Stackdriver может помочь вам контролировать ресурсы в вашем проекте и выявить узкие места.

1
ответ дан 4 December 2019 в 16:28

Теги

Похожие вопросы