Tomcat работает ужасно без видимых причин

Tomcat работает ужасно без видимых причин

Мы запускаем игровое приложение .WAR на Tomcat 6 на сервере Amazon EC2, 8-ядерный процессор, 7 ГБ ОЗУ. Приложение использует базу данных MySQL, размещенную на Amazon RDS.

Это приложение Facebook требует целую вечность для доступа, когда в него играют всего 20-30 пользователей. Большая разница с 1-2 пользователями. Весь .WAR весит ~4 МБ, весь статический контент размещен в другом месте.

Сервер никогда не был близок к исчерпанию оперативной памяти. Загрузка ЦП никогда не превышала 13,5-14%. Даже при ~500 пользователях, которые полностью все замедляли до остановки. Количество потоков или пулов потоков не близко к максимальному. Я увеличил maxthreads, но это не дало заметной разницы.

Моя теория заключается в том, что Tomcat может использовать только одно ядро ​​процессора, что объясняет, почему он замедлился до полной остановки, хотя использование ЦП было стабильно на уровне 13–14% во время пика активности.
Но я с трудом понимаю, почему он использовал только одно ядро ​​ЦП. В server.xml нет ограничения процессора. Приложение содержит несколько сервлетов (4 или 5). В коде Java нет упоминания SingleThreadModel.

ЧТО может быть причиной того, что приложение работает очень медленно? Если в приложении всего 1-5 человек, оно работает нормально. Если 20-30 человек, оно едва доступно для связи.

решение1

Это может быть недостатком в дизайне приложения. У нас также есть одно приложение, которое ведет себя так же. Значительная часть его кода синхронизирована, поэтому независимо от того, сколько процессоров мы ему дадим, он фактически работает в одном потоке. В этой ситуации вы не можете сделать практически ничего, кроме как запустить несколько экземпляров одного и того же приложения и распределить нагрузку между ними.

Связанный контент