|
|
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
Добрый день, Хотя тема уже обсуждалась, http://www.sql.ru/forum/actualthread.aspx?tid=379224, хотелось бы вернуться ещо раз. Иногда, неизвестно когда, через пару часов или пару недель, если не перестартовывать, ява забирает 100% ЦПУ и не отпускает. Нормально бывают кратковременые всплески до 30%, память вроде не поедается, т.е в обычном режиме и кода 100% ЦПУ потребление памяти ~одинаковое. Как определить какой из Thread загружает цпу? Делеал Threaddump в нормальном и загруженом режиме, больших различий не заметил. Может не то смотрел. В следуюший раз, когда такое случится, могу подключится jconsole или visualVM, может подскажите как можно с их помощью проанализировать ситуацию? Куда смотреть и на что обращать внимание. P.S. Java 1.6, На этой и на других машинах роботает такоеже приложение, но там такое не проиходит. Приложениа в основном читают file из различных директорий и записываиут их в DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 12:46:34 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
Покажите дампы потоков. Когда CPU загружен полностью, желательно сделать несколько дампов, чтобы найти поток, который всё ещё работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 13:04:09 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Это информация которую собрал по загруженому процесу 5032, 4088 тоже приложение после нового запуска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 13:28:07 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
В 5032 несколько потоков парсят какой-то XML 5032at com.dcx.pla.xload.InsertTeilSkeletonImpl.execute(Unknown Source) at com.dcx.pla.xload.PLAXLoader.loadTagData(Unknown Source) at com.dcx.pla.xload.PLAXLoader.handleTagPRUEFUNG(Unknown Source) at com.dcx.pla.xload.PLAXLoader.handleTag(Unknown Source) at com.dcx.pla.xload.PLAXHandler.endElement(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at com.dcx.pla.xload.PLAXLoader.run(Unknown Source) at com.dcx.pla.xload.PLAXLoader.load(Unknown Source) at com.dcx.pla.eai.adapter.pla.PlaXTarget.consume(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess$Send.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess$Wait.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess$Loop.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanProcess.execute(Unknown Source) at com.dcx.pla.eai.beans.BeanRouting.run(Unknown Source) at java.lang.Thread.run(Unknown Source) При полной загрузке CPU нужно сделать несколько дампов через некоторые промежутки времени. И посмотреть эти потоки BeanRouting-NAG2-UNIPAS-Schaltplatte-Files to PlaX BeanRouting-NAG2-P2-UNIPAS-Schaltplatte-Files to PlaX BeanRouting-S010AHZ05-1 Files to PlaX Либо они уже закончили работу, либо всё так же продолжают парсить XML. Наиболее подозрительным является факт что все потоки в один и тот же момент времени находятся в InsertTeilSkeletonImpl.execute(). Что это за метод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 13:41:20 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Этот метод делает insert в базу. public InsertTeilSkeletonImpl(String id, String snr, Connection connection){...} метод не синхронизированый Там есть ещо другой дамп, зделаный ~через минуту. 5032_2threaddm.log, 5032_threaddm.log Может deadlock , но почему тогда потоки в RUNNABLE, а не в BLOCKED? или они блокируются на уровне базы Спасибо за помощь, могли бы вы примерно описать логику анализа дампов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 14:22:01 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
mbrgЭтот метод делает insert в базу. Вот этого как раз и не заметно. Тогда с большой долей вероятности были бы ещё JDBC методы в стеке. mbrgpublic InsertTeilSkeletonImpl(String id, String snr, Connection connection){...} Метод execute() смотрите. может у вас там бесконечный цикл? mbrgметод не синхронизированый Это какое имеет значение? mbrgМожет deadlock , но почему тогда потоки в RUNNABLE, а не в BLOCKED? deadlock подразумевает блокировки. Их в указаном стеке нет. mbrgили они блокируются на уровне базы Работы с базой в стеке тоже нет. mbrgмогли бы вы примерно описать логику анализа дампов. Посмотрел все RUNNABLE потоки. Это оооочень подозрительно что 3 потока висят в RUNNABLE в одном и том же методе. Скорее всего у вас там бесконечный цикл образовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 14:29:48 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, в этом методе только один цикл: catch (SQLException error) { SQLException exx = error; int ercode; do { ercode = exx.getErrorCode(); if (ercode == -803){ logger.warn("InsertTeilSkeletonImpl "+exx.getMessage()); return false; } } while((exx = error .getNextException())!=null); throw new DataAccessException("InsertTeilSkeletonImpl.execute error "+error.getMessage(), error); } остальное select insert, а, так вот и ошибка!!!!!!!!!!!!!!!!!! while((exx = error .getNextException())!=null); vmesto while((exx = exx .getNextException())!=null); Спасибо Вам большое. очень помогли. как чаше всего и бывает кривые ручки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 16:15:08 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
На будущее - подключись к приложению с помощью JConsole, она сразу покажет картину маслом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 00:46:35 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
ResidentR6, Да, было бы не плохо ещё знать куда там смотреть, и как эту всю информацю понимать без достаточного опыта. Может есть где описания как JConsole пользоваться, как правильно с ней работать? Наверно в случае с OutOfMemorry логика рассуждений совсем другая чем в случае CPU 100%, или там утечки памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 12:51:05 |
|
||
|
JAVA CPU 100%
|
|||
|---|---|---|---|
|
#18+
mbrgДа, было бы не плохо ещё знать куда там смотреть, и как эту всю информацю понимать без достаточного опыта. Может есть где описания как JConsole пользоваться, как правильно с ней работать? Наверно в случае с OutOfMemorry логика рассуждений совсем другая чем в случае CPU 100%, или там утечки памяти. Ничего такого чего нет в jvisualvm, JConsole не покажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 12:53:42 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=276&tid=2131247]: |
0ms |
get settings: |
10ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
91ms |
get tp. blocked users: |
5ms |
| others: | 286ms |
| total: | 502ms |

| 0 / 0 |
