Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JAVA CPU 100% / 10 сообщений из 10, страница 1 из 1
26.07.2012, 12:46:34
    #37893660
mbrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
Добрый день,

Хотя тема уже обсуждалась, http://www.sql.ru/forum/actualthread.aspx?tid=379224, хотелось бы вернуться ещо раз.
Иногда, неизвестно когда, через пару часов или пару недель, если не перестартовывать,
ява забирает 100% ЦПУ и не отпускает.
Нормально бывают кратковременые всплески до 30%, память вроде не поедается,
т.е в обычном режиме и кода 100% ЦПУ потребление памяти ~одинаковое.
Как определить какой из Thread загружает цпу?

Делеал Threaddump в нормальном и загруженом режиме, больших различий не заметил.
Может не то смотрел.
В следуюший раз, когда такое случится, могу подключится jconsole или visualVM,
может подскажите как можно с их помощью проанализировать ситуацию?
Куда смотреть и на что обращать внимание.

P.S. Java 1.6, На этой и на других машинах роботает такоеже приложение, но там такое не проиходит.

Приложениа в основном читают file из различных директорий и записываиут их в DB2.
...
Рейтинг: 0 / 0
26.07.2012, 13:04:09
    #37893707
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
Покажите дампы потоков. Когда CPU загружен полностью, желательно сделать несколько дампов, чтобы найти поток, который всё ещё работает.
...
Рейтинг: 0 / 0
26.07.2012, 13:28:07
    #37893750
mbrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
Blazkowicz,
Это информация которую собрал по загруженому процесу 5032, 4088 тоже приложение после нового запуска
...
Рейтинг: 0 / 0
26.07.2012, 13:41:20
    #37893762
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
В 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(). Что это за метод?
...
Рейтинг: 0 / 0
26.07.2012, 14:22:01
    #37893848
mbrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
Blazkowicz,

Этот метод делает insert в базу.

public InsertTeilSkeletonImpl(String id, String snr, Connection connection){...}
метод не синхронизированый

Там есть ещо другой дамп, зделаный ~через минуту. 5032_2threaddm.log, 5032_threaddm.log
Может deadlock , но почему тогда потоки в RUNNABLE, а не в BLOCKED?
или они блокируются на уровне базы

Спасибо за помощь,
могли бы вы примерно описать логику анализа дампов.
...
Рейтинг: 0 / 0
26.07.2012, 14:29:48
    #37893860
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
mbrgЭтот метод делает insert в базу.

Вот этого как раз и не заметно. Тогда с большой долей вероятности были бы ещё JDBC методы в стеке.

mbrgpublic InsertTeilSkeletonImpl(String id, String snr, Connection connection){...}

Метод execute() смотрите. может у вас там бесконечный цикл?

mbrgметод не синхронизированый

Это какое имеет значение?

mbrgМожет deadlock , но почему тогда потоки в RUNNABLE, а не в BLOCKED?

deadlock подразумевает блокировки. Их в указаном стеке нет.

mbrgили они блокируются на уровне базы

Работы с базой в стеке тоже нет.

mbrgмогли бы вы примерно описать логику анализа дампов.
Посмотрел все RUNNABLE потоки. Это оооочень подозрительно что 3 потока висят в RUNNABLE в одном и том же методе. Скорее всего у вас там бесконечный цикл образовался.
...
Рейтинг: 0 / 0
26.07.2012, 16:15:08
    #37894048
mbrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
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);

Спасибо Вам большое.
очень помогли.

как чаше всего и бывает кривые ручки.
...
Рейтинг: 0 / 0
27.07.2012, 00:46:35
    #37894615
ResidentR6
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
На будущее - подключись к приложению с помощью JConsole, она сразу
покажет картину маслом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.07.2012, 12:51:05
    #37897552
mbrg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
ResidentR6,

Да, было бы не плохо ещё знать куда там смотреть,
и как эту всю информацю понимать без достаточного опыта.

Может есть где описания как JConsole пользоваться, как правильно с ней работать?
Наверно в случае с OutOfMemorry логика рассуждений совсем другая чем в случае CPU 100%, или там утечки памяти.
...
Рейтинг: 0 / 0
30.07.2012, 12:53:42
    #37897559
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAVA CPU 100%
mbrgДа, было бы не плохо ещё знать куда там смотреть,
и как эту всю информацю понимать без достаточного опыта.
Может есть где описания как JConsole пользоваться, как правильно с ней работать?
Наверно в случае с OutOfMemorry логика рассуждений совсем другая чем в случае CPU 100%, или там утечки памяти.
Ничего такого чего нет в jvisualvm, JConsole не покажет.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JAVA CPU 100% / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]