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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Серверное Java-приложение виснет намертво 
:(
    Опции темы
shainsky
  Дата 6.9.2012, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется серверное приложение, которое через сокеты слушает другие серверные приложения, а также своих клиентов.
Реализовано на стороннем фреймворке для гетерогенных систем (легковесный аналог Корбы).
Фреймворк использует ТредПул для обработки запросов, и ещё один ТредПул используется нами для реализации бизнес-логики.
Приложение работает на серваке с 16 ядрами, 4 гига отдано под кучу.
Где-то раз в неделю приложение наглухо виснет.
Треддамп получается снять только в forced-режиме (jstack -F), внутри него все потоки в состоянии BLOCKED.
После снятия тред-дампа в принудительном порядке приложение, как правило, "развисает".

Среда: Debian + Sun JDK 1.6.26

Были попытки воспроизвести баг на разработческих машинах (ОС и JDK те же), но даже в случае
ограничения размеров кучи и размеров ТредПула получали только тормоза или OutOfMemory,
при этом потоки не зависали.

В связи с этим 2 вопроса:
1. Глобальный - нет ли у коллективного разума подозрений, в чем может быть проблема?
2. Локальный - может ли кто-нибудь посоветовать профайлер, который бы с некоторой периодичностью делал текстовые отчеты
о состоянии памяти/потоков/GC? Графического интерфейса от продакшн-сервера я получить, увы, не могу, иначе юзал бы JVisualVM.

В аттаче - треддамп зависшего приложения.

Добавлено через 9 минут и 29 секунд
attach

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  jstack.txt 41,45 Kb
PM MAIL   Вверх
Vasay
Дата 6.9.2012, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 11
Всего: 73



shainsky, 


Цитата(shainsky @  6.9.2012,  15:01 Найти цитируемый пост)
Были попытки воспроизвести баг на разработческих машинах (ОС и JDK те же), но даже в случаеограничения размеров кучи и размеров ТредПула получали только тормоза или OutOfMemory,при этом потоки не зависали.


Было у меня такое, когда на одном сервере висли потоки. Когда на других все работало без проблем.


Особо разбираться не стал - попросил переставить систему. Не помогло. Попросил заменить железо - вопрос решился.


Был как-то случай, когда приложение падало на одном сервере с непонятной ошибкой (давно на этом форуме даже постил лог, сейчас и не найти). Проблема была в бракованной планке памяти сервера.
Так что я бы начал с диагностики железа сервера. Посмотрел бы на его температурный режим. 

Цитата

В аттаче - треддамп зависшего приложения. 


Забыли прикрепить?


п.с. как Ваше приложение грузит сервер?  Количество максимально разрешенных открытых файлов в системе достаточно для всех потоков? 

Это сообщение отредактировал(а) Vasay - 6.9.2012, 15:18


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
shainsky
Дата 6.9.2012, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сейчас вроде прикрепилось.

Независимо от состояния (зависло или нет) приложение отжирает 3 ядра из 16.

Доступные файлы не смотрел. А что - просветите неграмотного - для каждого потока ОС открывает временный файл?
PM MAIL   Вверх
Vasay
Дата 6.9.2012, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 11
Всего: 73



Цитата(shainsky @  6.9.2012,  15:32 Найти цитируемый пост)
Доступные файлы не смотрел. А что - просветите неграмотного - для каждого потока ОС открывает временный файл?



Каждое socket соединение в *nix считается открытым файлом.

Обычно после установки linux ограничение стоит в 1024 открытых файла (а у Вас я там смотрю номера потоков за 10000)

В коде могут быть ошибки, которые не закрывают файлы/сокеты  и постепенно количество открытых файлов растет.

Для того что бы посмотреть и установить лимиты можно воспользоваться командой ulimit с разными параметрами.
 
 

Это сообщение отредактировал(а) Vasay - 6.9.2012, 16:36


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
COVD
Дата 6.9.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

В коде могут быть ошибки, которые не закрывают файлы/сокеты  и постепенно количество открытых файлов растет.

и вообще любой ресурс, который берется из ограниченного пула, но не возвращается.  Или классический thread deadlock. Moe предположение - это ошибка программирования.
PM MAIL   Вверх
jk1
Дата 6.9.2012, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 40
Всего: 75



Цитата

 Графического интерфейса от продакшн-сервера я получить, увы, не могу, иначе юзал бы JVisualVM.


Есть профайлеры, умеющие снимать статистику удаленно, например JProfiler. Меня в похожей ситуации выручил именно он. 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
shainsky
Дата 6.9.2012, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



О, за JProfiler спасибо. Он еще и по расписанию, оказывается, умеет.

Добавлено через 12 минут и 3 секунды
Цитата(Vasay @ 6.9.2012,  15:44)
Цитата(shainsky @  6.9.2012,  15:32 Найти цитируемый пост)
Доступные файлы не смотрел. А что - просветите неграмотного - для каждого потока ОС открывает временный файл?



Каждое socket соединение в *nix считается открытым файлом.

Обычно после установки linux ограничение стоит в 1024 открытых файла (а у Вас я там смотрю номера потоков за 10000)

В коде могут быть ошибки, которые не закрывают файлы/сокеты  и постепенно количество открытых файлов растет.

Для того что бы посмотреть и установить лимиты можно воспользоваться командой ulimit с разными параметрами.

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

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

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


 




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


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

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