Я использую tomcat для преобразования PDF в PNG. Я использовал Jmeter для загрузки / тестирования пропускной способности приложения с помощью сервера Intel (R) Xeon (R) CPU X5550 @ 2,67 ГГц, который имеет 16 ядер с гиперпоточностью. Tomcat6 имел 2 гигабайта выделенной памяти, а коннектор был настроен для обработки 1000 одновременных подключений. Во время нагрузочного тестирования я обнаружил, что по мере увеличения количества пользователей время отклика ухудшается, что является нормальным явлением. Однако средняя загрузка была очень низкой (около 1 для 16-ядерной машины), а загрузка процессора составляла около 60%. Я отслеживал экземпляр tomcat с помощью jconsole через JMX и обнаружил, что использование памяти не является проблемой. Чтобы уменьшить время отклика, я создал около 8 экземпляров tomcat на 8 разных портах и установил балансировщик нагрузки, балансирующий нагрузку между всеми 8 портами во время нагрузочного тестирования. На этот раз я обнаружил, что сервер может обрабатывать намного больше одновременных подключений без снижения времени отклика. Средняя загрузка также была высокой - 7. Таким образом, похоже, что tomcat неэффективно использует ЦП при установке только с одним экземпляром (я даже пытался создать несколько разъемов на разных портах).
Похоже, нам нужно запустить несколько экземпляров tomcat на одной машине, чтобы добиться максимальной производительности. Выполнение такой настройки не оптимально, поскольку создание нескольких экземпляров на пуле серверов и их обслуживание будет сложной задачей.
Мой вопрос в том, можно ли настроить tomcat таким образом, чтобы один экземпляр использовал как можно больше процессора при высокой средней нагрузке?
Прокомментируйте, если у вас есть какие-либо вопросы по настройке.
Буду признателен за любую помощь / указатель.
Мне кажется, что у приложения есть узкое место. Я предполагаю, что для преобразования PDF-файлов используется только один поток.
Tomcat запускает сервлеты параллельно, но когда сервлеты вызывают однопоточную библиотеку, ваше веб-приложение становится однопоточным. Вы должны изменить свое приложение, чтобы использовать больше потоков.
Не слишком приятный обходной путь - это запуск такого количества экземпляров Tomcat, сколько у вас ядер, и балансировка нагрузки на запросы к ним (как вы упомянули в вопросе).