![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| danilkus |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Привет всем!
Запускаю на томкате простой сервлет. Вот часть его кода:
Используется чистый дистриб томката, скаченный с сайта. Конфиг используется стандартный, за исключением коннектора
Система работает под нагрузкой следующего рода. 40 потоков, каждый из которых шлет раз в секунду POST запрос. Никаких необычных заголовков в запросе нет. Томкату при старте выдаю 300Мб памяти. После примерно трех часов работы он выдает OutOfMemoryError. Анализ дампа показывает подозрительно большое количество инстансов com.sun.net.ssl.internal.ssl.SSLSessionImpl. Остальное вроде все в норме. |
||||
|
|||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
danilkus
На сколько помню у Tomcat дефолтное время жизни сессии 30 минут. Если каждый запрос порождает новую сессию (открывает новое соединение) каждую секунду, то память вполне может закончится. Запусти Tomcat с ключем -verbose:gc и понаблюдай как будет расходоваться и очищатся память во время теста. |
|||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Пробовал ставить keepAliveTimeout в 0. По идее после этого сокет должен закрываться сразу после отправки ответа и HTTP сессия соответственно. Не помогло.
Во тут описывается точь в точь такая же проблема. http://forum.java.sun.com/thread.jspa?thre...66&tstart=0 Судя по всему проблема в реализации JSSE. Можно ли как-нибудь запустить томкат с другим провайдером SSL? Если кто-нибудь пробовал подскажите примерно как это делается. |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Где? Попробуй в web.xml именно твоего приложения поставить короткий таймаут сессии.
Не факт, что сервлет контенер убивает сессионый объект сразу же. Скорее всего нет. И все таки попробуй -verbose:gc, он же всю картину показывает. |
|||
|
||||
| danilkus |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
в настройке томкат коннектора, через который идут все запросы.
попробую
ну а смысл держать объект если сокет закрыт. Все равно будут только новые сессии.
мониторил через JConsole. Видно что каждый раз fullGC освобождает меньше объектов из пула постоянных объектов heap. И соответственно работать ему приходится все чаще. По дампу видно что есть куча инстансов SSLSessionImpl, которые держатся ссылками из Finalizer и именно их GC и не может подчистить. Больше ИМХО там увидеть ничего нельзя. |
||||||||
|
|||||||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Согласен.
Может кривая реализация. Тут тоже поднимается эта проблема. Без ответа. |
|||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Как можно заставить томкат работать по SSL без JSSE?
|
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
danilkus, можно поставить перед томкатом SSL акселератор. или какой-нибудь софт со схожими функциями.
Добавлено @ 11:42 А вообще надо будет посмотреть, может и возможно настроить Tomcat работать со сторонними реализациями JSSE. Мне кажется такое должно быть возможно. Добавлено @ 11:51 PS. Кстати на сколько я помню, можно наладить взаимодействие между Apache (не Tomcat) серваком и Tomcat ом, чтобы Apache скармливал Tomcat у, обработку сервлетов и прочей java лабуды. Тогда SSL сервер можно будет поднять на Apache (не Tomcat) сервере, а запросы обрабатывать на Tomcat`е Это сообщение отредактировал(а) Alexandr87 - 4.5.2008, 11:52 |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
||||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Этот вариант как раз пробую сейчас |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Когда визард нетбинса генерирует шаблон сервлета, то он дает такой код:
Может, вы не закрываете? |
|||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
setStatus очищает буфер, поэтому там ничего копиться не может. Ссылка на out тоже помирает после ответа. Тем более что если бы текло здесь проблема бы воспроизводилась и без SSL, а она не воспроизводится. Хотя согласен, что такой код лучше. |
|||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Если просто настроить использование openSSL, как указано тут, все равно используются классы JSSE и ситуация повторяется. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
setStatus не замена out.close(), т.е. не закрывает стрим и не освобождает ресурсы. Можно выполнить setStatus, а потом продолжать с успехом писать в out, что невозможно после выполнения close(). |
|||
|
||||
| danilkus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Согласен, дырка определенная тут есть. Но проблема топика к сожалению не в этом. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |