2010-05-18 3 views
5

Я пишу приложение Java, которое работает в Tomcat, на многоядерном оборудовании. Приложение выполняет алгоритм и возвращает ответ пользователю. Проблема в том, что даже когда я запускаю два запроса одновременно, в процессе tomcat используется не более одного ядра процессора.
Насколько я понимаю, каждый запрос в Tomcat выполняется в отдельном потоке, а JVM должен запускать каждый поток на отдельном ядре процессора.Проблема многопоточности tomcat

В чем может быть проблема, связанная с тем, что JVM или Tomcat используют не более одного ядра?

Заранее спасибо.

+0

Какой JVM вы используете? – ShiDoiSi

+0

Версия java - «1.6.0_20» – jutky

ответ

0

Вы уверены, что создаются две нити. Вы можете просто напечатать имя потока в качестве быстрого теста.

Что произойдет, если вы запустите алгоритм в автономном приложении?

+0

После многих тестов я обнаружил, что в автономном приложении такая же проблема все еще существует. Я продолжил с подробным профилированием и принял решение, что, когда FULL GC работает, все остальные потоки спали, и я вижу, что используется только одно ядро ​​ЦП. Проблема в том, что алгоритм является жадным в памяти, и почти все время JVM пытается запустить FULL GC. Поэтому в Tomcat нет проблем, теперь я рассмотрю использование памяти и попытаюсь найти, где я могу сохранить отходы памяти. Я считаю этот ответ правильным, потому что он приводит меня к правильному выводу (несмотря на то, что он не решает проблему). – jutky

0

Все управление процессором будет заботиться о самом сервере. Не обязательно, чтобы, если вы передали два запроса, он должен использовать два процессора.

+0

Итак, как я могу управлять им для запуска разных процессоров? – jutky

+0

Распределение ресурсов не в наших руках. Но администратор сервера может настроить балансировку нагрузки между двумя серверами в зависимости от некоторых условий, таких как использование памяти, загрузка процессора и т. Д., –

+2

Я запускаю tomcat самостоятельно, поэтому он должен быть в моих руках. – jutky

0

Выполняете ли вы какие-либо синхронизированные блоки/методы, которые могли бы привести к серийному исполнению? Конфигурация коннектора tomcat в server.xml управляет пулом потоков запросов, но по умолчанию это 200 потоков, IIRC.

+0

У меня есть синхронизированные блоки, но, насколько я проверял, они не вызывают проблемы. Я пытаюсь перепроверить его еще раз. – jutky

-1

Вот процедура сделать балансировку нагрузки в коте http://tomcat.apache.org/tomcat-5.5-doc/balancer-howto.html

Я думаю, что это будет работать с Tomcat-тоже как они упоминали балансир WebApp поставляются с TOMCAT 5.0 и более поздними версиями.

+0

не говорили о запросах на балансировку нагрузки на несколько серверов, которые говорили о многопоточных запросах. – user3338098

Смежные вопросы