|
|
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
День добрый! Есть приложение, которое выполняет долгий рассчет, работая в цикле. Я слежу за его состоянием просто глядя на лог где печатается номер итерации. Однако в какой-то момент бывает так, что печать останавливается. Приложение продолжает работать. Я коннекчусь к нему через VisualVM, монитор показывает что HeapSpace - занято 800мб из 3гб график UsedHeap похож на пилу с периодом 10-15 сек TaskManager говорит о 100% занятости CPU Постоянный GC? Но ведь он не доходит до предельного заполнения памяти, зачем так часто GC делать? Можно ли это исправить? Как диагностировать проблемы в таких ситуациях? Что добавить в приложение чтобы облегчить себе жизнь при диагностировании таких ошибок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2015, 22:58 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
Он не доходит до вывода в system.out и зацикливается где-то. GC начинает активно отжирать процессор если хип приближется к максимальному на сколько я помню, а так работает не особо (5-7% обычно от CPU). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2015, 23:02 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
Dymytry, печать иногда останавливается если случайно нажал какуюто клавишу в консоли. Такой эффект я наблюдал в Windows. По хорошему логгировать надо через нормальные библиотеки (log4j) в файл. И оттуда смотреть чо как. Или через JMX наблюдать значения нужных счётчиков или состояний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 00:02 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
DymytryКак диагностировать проблемы в таких ситуациях? Что добавить в приложение чтобы облегчить себе жизнь при диагностировании таких ошибок? Что значит "приложение продолжает работать"? Как видишь работу? Надо освоить логирование, уровня trace понаставить... побольше и включить на время trace. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 10:07 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
Логирование есть, но логи ничего не выводят. Т.е. в какой-то момент он перестает писать в логи. * * * Добавил GC логирование. Оказалось: Когда приложение работает нормально, вижу: GC14745453 [GC [PSYoungGen: 515062K->69120K(563712K)] 551267K->144915K(1961984K), 0.0724851 secs] [Times: user=0.30 sys=0.00, real=0.07 secs] 14745452 Когда оно зависло, оно пишет, не переставая: GC[GC [PSYoungGen: 698432K->128K(698880K)] 1867872K->1169568K(2097152K), 0.0027902 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC [PSYoungGen: 698496K->64K(698880K)] 1867936K->1169504K(2097152K), 0.0070425 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] [GC [PSYoungGen: 698464K->128K(698880K)] 1867904K->1169568K(2097152K), 0.0028557 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC [PSYoungGen: 698496K->128K(698880K)] 1867936K->1169568K(2097152K), 0.0030874 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Т.е. по ходу реально все время идет на Minor GC. Т.е. причина проблемы в том, что стало генериться больше мусора. Но почему? Функциональность со временем выполнения не меняется. Скорость создания объектов должна быть такой же. Отсюда дополнительный вопрос: как мне понять какие инстансы очищаются GC, т.е. что именно было в тех 600гб которые очистил GC в последнем логе? Ведь если я вызову взять HeapDump в VisualVM он сначала вызовет GC и того что мне надо я не увижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 11:17 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
Dymytry, мне кажется ты путаешь причину со следствием. Логи GC что ты привёл не несут никакой ценной инфы. И они не являются признаком того что в системе что-то не так. Это просто обычные логи. Далее. Я предлагаю тебе сделать 2 дампа стека потоков. 1) Во время т.н. нормальной работы приложениея. Когда идёт расчёт и пишутся логи. 2) Во время неотзывчивого поведения когда по твоему мнению что-то пошло не так и логи не пишутся. Приаттачивай эти дампы к форуму и будем смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 14:06 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
Dymytry, делать обычную отладку приложения. либо через лог, либо через бряки. Т.е. найти номер итерации где валится и там смотреть. авторКогда оно зависло дак когда оно зависло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 15:20 |
|
||
|
Приложение не подает признаков жизни. Как понять что происходит?
|
|||
|---|---|---|---|
|
#18+
В общем, знатоки были правы :) Приложение не зависало и с GC проблем не было - просто я забыл синхронизировать один участок и имел конкуррентную запись в ХэшМэп, которая в какой-то момент попадала в бесконечный цикл, видимо там Node.next проставлялся так что получался замкнутый круг. ThreadDump в этом помог. Сейчас, смотрю, приложение доходит до точки когда действительно занимается вся память, но это уже совсем другая история... :) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2015, 23:09 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=114&tid=2124767]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 432ms |

| 0 / 0 |
