#performance #scala #jvm #spray #akka-http
#Производительность #scala #jvm #spray #akka-http
Вопрос:
Я тестирую spray и akka-http, чтобы быть в курсе возможной пропускной способности, которую я могу получить. Протестированное приложение простое. Он возвращает статический вывод по статическому пути получения. Но в случае обеих фреймворков я получаю снижение пропускной способности с ~ 64000 до ~ 22000 rps при увеличении длины статического ответа с 7 до ~ 2040 символов.
Кто-нибудь еще сталкивался с таким поведением? Как можно улучшить ситуацию?
Протестированный код можно найти здесь: суть
Это вдохновлено тестом, описанным в этом вопросе.
Используемые версии:
ubuntu 14.04, scala 2.11.8, oracle jdk 1.8
akka-http: 2.4.11
spray: 1.3.1 с akka 2.3.6
Комментарии:
1. Вы возвращаете в 300 раз больше данных, но получаете замедление только в 3 раза. Это все еще звучит неплохо. Итак, вы перешли от нажатия 7 * 64000 = 448000 бит / с к 2040 * 22000 = 44880000 бит / с, что в целом все еще является значительным увеличением.
2. Что ж, wrk показывает увеличение с ~ 9 МБ / с до ~ 11 МБ / с. Но я не вижу в AWS CloudWatch чего-то похожего на насыщение сети. Я не думаю, что сеть является моим узким местом. Я также не вижу насыщения процессора или памяти: загрузка процессора снижается с 80% до 60%. Объем памяти увеличен с 0,5 ГБ до 1,5 ГБ (при 14 ГБ свободного места в системе). Прерывания процессора значительно не увеличиваются. Так почему spray / akka-http должен иметь возможность обрабатывать значительно меньше запросов?
3. @jrudolph, извините. Я повторил свои тесты и увидел ошибку. Пропускная способность в МБ / с увеличена с ~ 9 МБ / с до ~ 70 МБ / с. Я добавил также вариант со scalatra в набор тестов (код добавляется к той же сути) и увидел аналогичную пропускную способность с длинным выводом. Похоже на ограничение пропускной способности сети. С другой стороны, iperf от клиента к серверу с параметрами по умолчанию дает мне ~ 88 МБ / с. Как я могу лучше проверить эту гипотезу? Результаты тестирования можно найти здесь
Ответ №1:
Похоже, это проблема с сетью.
@jrudolph спасибо, что подчеркнули пропускную способность сети.