Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тормоза приложения на Tomcat 7 
:(
    Опции темы
Ares4322
Дата 20.6.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



Доброго времени суток!
Есть проект на Java. Он крутится он Tomcat 7. Приложение состоит из толстого javascript клиента, который периодически опрашивает сервлет. В init() сервлета получается БД-соединение из пула сервера. В destroy() это соединение закрывается.

Проблема в том, что при запуске сервера с приложением память, которую он занимает, равна примерно 100 Мб. Через несколько дней она увеличивается до 600 Мб. И при этом если подсоединится к серверу  и запросить данные, то при первом запросе он сильно тормозит, а потом отвечает пошустрее. Количество пользователей, постоянно висящих на сервере, обычно не превышает 10. 

Я подозреваю, что не освобождается память, выделенная приложению, или (что мало вероятно) течет память в самом сервере.
Подскажите, что это может быть и какими инструментами можно воспользоваться, чтобы определить источник проблемы?
PM MAIL   Вверх
powerOn
Дата 20.6.2011, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



любой профайлер в помощь, начать можно с visualvm - он с состав jdk входит.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Ares4322
Дата 20.6.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



А какая технология работы с профайлерами?
То есть какие параметры замерять, что с чем сравнивать, на что обращать внимание?
Если можно, то скиньте какие-нибудь ссылки для ознакомления.
PM MAIL   Вверх
Samotnik
Дата 20.6.2011, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



PM MAIL   Вверх
COVD
Дата 21.6.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

В init() сервлета получается БД-соединение из пула сервера. В destroy() это соединение закрывается.

Вы как-то сумбурно сформулировали. Может вы некорректно используете пул соединений? В сервлете в начале обработки запроса соединение берется из пула и после отправки ответа соединение возвращается в пул. 

Это сообщение отредактировал(а) COVD - 21.6.2011, 16:10
PM MAIL   Вверх
Ares4322
Дата 22.6.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



Нет. Я именно при инициализации сервлета получаю соединение и закрываю его только при уничтожении сервлета. 
Зачем каждый раз открывать/закрывать соединение?

Samotnik, спасибо за ссылку.

Опытным путем и с помощью утилиты поиска утечек в томкате определил, что при редеплое приложения некоторые классы приложения не выгружаются. Тут, видимо, память и течет. А тормоза особо с этим не связаны.
PM MAIL   Вверх
COVD
Дата 22.6.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

Нет. Я именно при инициализации сервлета получаю соединение и закрываю его только при уничтожении сервлета. 
Зачем каждый раз открывать/закрывать соединение?

Но инстанс сервлета обычно один и он должен обслуживать запросы параллельно. Если же соединение с базой одно на инстанс, то наверное вы, используя синхронизацию, вынуждаете сервлет обслуживать запросы последовательно. Если бы вы брали соединения из пула и возвращали, то была бы параллельная обработка.
PM MAIL   Вверх
Ares4322
Дата 22.6.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



А разве для каждой сессии не используется свой экземпляр сервлета в отдельном потоке?
PM MAIL   Вверх
COVD
Дата 22.6.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

А разве для каждой сессии не используется свой экземпляр сервлета в отдельном потоке? 


Нет. По умолчанию - один экземпляр для всех потоков.

Если же сервлет имплементирует interface SingleThreadModel, то контейнер, возможно, создаст пул экземпляров.

Цитата

If a servlet implements this interface, you are guaranteed that no two threads will execute concurrently in the servlet's service method. The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet.


Но этот интерфейс давно уже deprecated и такой подход всеми признан не эффективным. 

Это сообщение отредактировал(а) COVD - 22.6.2011, 15:35
PM MAIL   Вверх
Skipy
Дата 22.6.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 2
Всего: 16



Цитата(Ares4322 @ 22.6.2011,  14:48)
А разве для каждой сессии не используется свой экземпляр сервлета в отдельном потоке?

Совершенно точно нет. Экземпляры сервлета создаются в том количестве, которое сочтет нужным контейнер. Но везде говорится, что сервлет дожен быть thread safe, т.е. один экземпляр может использоваться в разных потоках.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Ares4322
Дата 23.6.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



Понятно, то есть нужно при каждом обращении к БД получать свое соединение с БД и после этого его закрывать.
А не подскажете инструмент, с помощью которого можно проще и быстрее писать код работы с БД. Но ORM мне не нужен. SpringJDBCtemplate, Apache JDBC util или еще что-то?

PM MAIL   Вверх
Farmazon
Дата 24.6.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: 3
Всего: 5



myBatis?...

Это сообщение отредактировал(а) Farmazon - 24.6.2011, 18:46


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Ares4322
Дата 25.6.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 2
Всего: 3



Farmazon, спасибо, посмотрю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0997 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.