Я разработал мини-HTTP-сервер на C++, используя boost :: asio, и теперь я загружаю его несколькими клиентами, и мне не удалось приблизиться к насыщению CPU. Я тестирую экземпляр Amazon EC2 и получаю около 50% использования одного процессора, 20% другого, а остальные два неактивны (согласно htop).Сервер Socket Socket - не удалось насытить CPU
Детали:
- Сервер запускает один поток на ядро
- Запросы принимаются, разобранные, обработаны и ответы выписаны
- Запросы данных, который считывается из память (только для чтения для этого теста)
- Я загружаю сервер с использованием двух машин, каждый из которых запускает приложение Java, работает 25 потоков, отправляет запросы
- Я вижу около 230 запросов/сек. ughput (это приложение запросы, которые состоят из многих запросов HTTP)
Итак, что я должен смотреть на то, чтобы улучшить этот результат? Учитывая, что процессор в основном неактивен, я бы хотел использовать эту дополнительную емкость, чтобы получить более высокую пропускную способность, скажем, 800 запросов/сек или что-то еще.
Идеи У меня была:
- Просьбы очень мал, и часто выполняется в течение нескольких миллисекунд, я мог бы изменить клиент для отправки/сочинить больше запросов (возможно, с помощью пакетирование)
- I может изменить HTTP-сервер, чтобы использовать шаблон дизайна Select, это уместно?
- я мог бы сделать некоторое профилирование, чтобы попытаться понять, что являются узким местом-х/является
Удовлетворительно предположить, что на сервере имеется порт 1 Гбит/с? Каковы ваши размеры запросов и ответов (на проводе)? – nik
Каково использование полосы пропускания на сетевом порту сервера (тот, который я предполагаю равным 1 Гбит/с) – nik
Тест работает на EC2, который, я считаю, использует Gigabit. Bmon сообщает о скорости передачи данных в 3MiB (мегабит), а также скорости 2.5Mib RX. Многие размеры запросов/ответов небольшие (всего 100 байт), но некоторые ответы до 1 Мбайта, запросы, вероятно, до 0,25 мб. –