Я размещаю сервер через Google Compute Engine для различных целей, в первую очередь сервер Minecraft, и он получает много трафика и использования. Мы говорим о довольно постоянном использовании ЦП на уровне 150%, 50 чтений / 10 записей в секунду на диск и 600 вниз / 1700 сетевых пакетов в секунду, так что довольно мало использования.
Проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на то, что сервер полностью способен обрабатывать такое большое использование, все еще есть проблемы с задержкой и / или обработкой. Есть много моментов, когда совершенно неожиданно один процесс, который должен выполняться всего за одну десятую секунды, занимает 40 секунд или даже больше.
Вот возможные проблемы, которые мы уже рассмотрели, и решения, которые мы уже нашли:
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
-server -Xmx5G -Xms5G -Xmn2500M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+AggressiveOpts
Как видите, мы приняли различные меры для уменьшения задержки и ограничения процессов, но у нас просто закончились идеи. Есть ли другой способ ограничения нашего процесса, который мы упустили, или это проблема, присущая программному обеспечению, которое мы размещаем?
Следует учитывать несколько моментов:
a) Виртуальные машины GCE имеют ограничения выходной пропускной способности сети, как описано Вот. В соответствии с этим ограничением учитываются операции ввода-вывода PD и сетевой трафик. Для ВМ с 4 ядрами ограничение составляет 8 Гбит / с.
б) Максимальные устойчивые IOPS дисков GCE задокументированы. в этой статье. Использование локального SSD может увеличить вашу производительность, но информация на этих дисках недолговечна. Другими словами данные в Локальный SSD сохраняется только до тех пор, пока вы не остановите или не удалите виртуальную машину.
в) Stackdriver может помочь вам контролировать ресурсы вашего проекта и выявить узкие места.