Я разработал мини-HTTP-сервер на С++, используя boost:: asio, и теперь я загружаю его несколькими клиентами, и мне не удалось приблизиться к насыщению процессора. Я тестирую экземпляр Amazon EC2 и получаю около 50% использования одного процессора, 20% другого, а остальные два неактивны (согласно htop).
Подробнее:
- Сервер запускает один поток на ядро
- Выполняются запросы, обрабатываются, обрабатываются и ответы
- Запросы относятся к данным, которые считываются из памяти (только для чтения для этого теста).
- Я загружаю сервер, используя две машины, каждая из которых запускает Java-приложение, запускает 25 потоков, отправляет запросы
- Я вижу около 230 запросов/сек (это запросы приложений, которые состоят из множества HTTP-запросов)
Итак, на что я должен смотреть, чтобы улучшить этот результат? Учитывая, что процессор в основном простаивает, я бы хотел использовать эту дополнительную емкость для получения более высокой пропускной способности, скажем, 800 запросов/сек или что-то еще.
Идеи, которые у меня были:
- Запросы очень маленькие и часто выполняются за несколько мс, я мог бы модифицировать клиента для отправки/компоновки больших запросов (возможно, с использованием пакетной обработки)
- Я мог бы изменить HTTP-сервер, чтобы использовать шаблон выбора Select, здесь это подходит?
- Я мог бы сделать некоторые профилирования, чтобы попытаться понять, что узкое место /