Узкое место в производительности во встроенном контейнере Jetty с REST API - PullRequest
0 голосов
/ 05 апреля 2019

Обращаюсь за советом по решению проблемы пропускной способности в моем сервисе симулятора на основе открытого JDK 1.8, весенней загрузки 1.5.9 REST API, размещенного встроенного контейнера Jetty 9.4.15.Служба предоставляет единственную конечную точку через метод HTTP GET и при вызове возвращает XML, который соответствует схеме VAST.Одна и та же конечная точка может создавать два типа контроллера формата сообщений XML через параметр запроса.Первое XML-сообщение имеет размер около 700 байтов, а второе - около 30 КБ.

Требование к производительности для сообщения типа 2 составляет около 30000 HTTP-запросов / секунду со временем отклика 20-25 миллисекунд.

Аппаратное обеспечение, используемое для этого теста, - Gen10 DL360 с 32 ядрами (с включенной гиперпоточностью) и 128 ГБ ОЗУ.Эта машина содержит две виртуальные машины, созданные с использованием ядра гипервизора vmware.16 и 40 ГБ, выделенных одной виртуальной машине, и 6 ядер и 18 ГБ ОЗУ, выделенных другой.Тестируемый экземпляр Jetty работает в первой виртуальной машине.

Параметр JVM, использованный для запуска службы: / usr / bin / java -Dsun.misc.URLClassPath.disableJarChecking = true -server -Xmx24G -Xms2G -XX: + UseParallelGC -XX: + UseParallelOldGC -XX: + AggressiveOpts -XX: SurvivorRatio = 4 -XX: TargetSurvivorRatio = 90 -XX: Макс.-jar /usr/local/test/simulator/simulator-service/simulator-service-2.1-SNAPSHOT.jar

командная строка инструмента ab: ab -t 120 -n 1000000 -c 300 -k http://10.93.243.87:8100/simulator/vast?id=1

При настройке Jetty используются 50-минутные потоки qtp и 200 максимальных потоков qtp с размером очереди 25000. Также перед тестом выполняются следующие настройки уровня ядра.

  • hard nofile 40000
  • soft nofile 40000

sysctl -w net.ipv4.tcp_tw_recycle = 1 sysctl -w net.ipv4.tcp_tw_reuse = 1

Наблюдение: во время работы инструмента ab оноШироко видно из 16 ядер в этой виртуальной машине почти 9 соres полностью используются.

Является ли большой размер сообщения XML причиной снижения производительности?С помощью других средств я могу достичь целевого показателя производительности 30000 HTTP-запросов / секунду в одном экземпляре Jetty.

...