![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Barvetal |
|
||||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
Всем здравствуйте!
Периодически падает jvm по причине OutOfMemoryError. Как мне отловить утечку памяти? Для того, чобы понять, где утечка, я включил опции -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/jmap. Версия jvm - 6.02. Версия ОС: SuSe Linux 10.2. Но при падении по причине нехватки памяти дамп памяти не создается. Запись в логе:
В данном случае он написал две записи об OutOfMemoryError. Но как правило пишет только одну запись - вторую. По пути /opt свободно 6Гб. Под java машину я выделил 3Гб (-Xmx3g). То-есть, дамп памяти вряд ли не создался по причине нехватки места на диске. И еще один момент. Через какое-то время после падения сервера я ищу jvm-процес командой ps -ef | grep java, но java-машины он не находит. То-есть, падение такое, что даже jvm-процесс в Linux убивается... Еще интерестный момент. Когда я смотрю гистрограмму памяти (jmap -histo:live <pid>), то jvm обычно потребляет 1.2-1.8 Гб памяти (из максимальных 3 Гб). Так вот, примерно в 19:10 jvm потребляла 1.2Гб, а в 19:45 того же дня вся память закончилась... Перед этим сайт простоял 3 суток, и проработал в режиме "каждые 40 минут освобождал память до 1-2Гб, а потом медленно накапливал до 3 Гб). А в этот раз память он просто не освободил. Таким образом, насколько я понимаю, память в принципе не накапливается постепенно. Похоже, что либо она накапливается в течение 45 минут, либо просто почему-то не освобождается... Скриншоты приложены. Первый скриншот - jconsole, второй - jmeter. Скажите, как можно устранить эту утечку памяти? Потому что у меня уже просто нет вариантов :( Скриншот: |
||||
|
|||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
т.е. это не "утечка" в традиционном смысле. Это похоже на ошибку в коде, когда вдруг очень быстро захватывается вся имеющаяся память. Например, сервер постоянно обращается к внешнему ресурсу, а ресурс вдруг перестает отвечать и все запросы выстраиваются в очередь -> очередь растет пока не кончится память. Это сообщение отредактировал(а) COVD - 25.10.2007, 03:50 |
|||
|
||||
| Barvetal |
|
||||||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
Похоже. Но обратите внимание на график потоков. Они на нуле. Если бы было так, как вы говорите, потоки бы выросли. И еще один момент. Обратите, пожалуйста, внимание на графики памяти, которые я приложил. Как здесь видно, GC для OldGen срабатывает примерно раз в 45 минут успешно (каждые 45 минут видно, как количество потребляемой памяти падает до 1-2Гб), и в каждые эти 45-минутные интервалы потребляемая память плавно растет. А тут вдруг в этот раз GC для OldGen'а рас - и не освободил ничего! Вот у меня и возникает вопрос - как это может быть? Может, произошел какой-то сбой в jvm, и она не запустила GC для OldGen? Или как тогда может быть, что за тот же временной интервал вся память, накопленная за 45 минут, стала неосвобождаемой? Пожалуйста, проанализируйте график! |
||||||
|
|||||||
| COVD |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Наверное, график отображает нормальный режим, когда поток быстро делает свое дело и уходит. А лавинообразное нарастание потоков просто не вошло в график. Или это не потоки сьели память. Надо знать приложение.
Это нормальные графики. А не освободил ничего возможно потому что не смог. Если новые обьекты стремительно создаются и не отпускаются, то GC ничего не может сделать. Посмотрите лог GC. Для этого можно использовать например -Xloggc: и будет в консоль выводиться. По крайней мере увидите, были ли попытки чистить память. На графике это трудно разглядеть.
Скорее всего какое-то событие (сбой внешних систем, внешний запрос или еще что-то нерегулярное) приводит к быстрому созданию обьектов. |
||||||
|
|||||||
![]()
|
| Правила форума "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. |