powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировка потоков
25 сообщений из 114, страница 1 из 5
Блокировка потоков
    #40063130
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет
Есть кусок кода- который выполняется в многопоточном режиме- в чем суть
Код не менялся,ничего не менялось- лишь нарастал объем данных ,которые этот код обрабатывал и вот в какой то момент я обнаруживаю что результат работы кода - условно посчиаем его в записях в бд стал 900 к ,вместо положенных 1.7 млн
иду на сервер - смотрю что там - там на 100% загружены 10 ядер
при этом прилоежние работу не продолжает но и не стопается ( добавил специально логи )
очень похоже на дед лок.
прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи все дедлочится и привет.Но разве такое возможно чтобы дедлок был всегда идентичен- тоесть работает приложение все норм и бац на 91231212 записи все блочится и на следующий прогон именно на том же порядковом номере .
Есть еще предположение что приложение упирается в лимиты по памяти и какие то потоки не могут получить свои данные изза этого и все так же виснет хз

в логах ошибок нет ни в приложении,ни от серевера,в логах бд тоже ничего
по дедлоку тоже вопрос - почему раньше все работало - а сейчас нет- причем ладно бы изза увеличения даных это было где то в конце - нет же - на середине блокируется все
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063144
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дедлок - это взаимная бокировка. А блокировка не потребляет 100% CPU (если конечно она не на CAS'ах).
Для начала лучше подключись через jvisualvm к приложению и сними семплирование, или используй JFR, ну или по старинке - по тред-дампам посмотри где потоки чаще всего висят.
А может и вообще что все эти 100% CPU - это garbage collector (это тоже должно быть видно через метрики или тот же JMX).


Ну и ради эксперимента попробуй "91231212" запись обработать независимо, может дело в данных
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063151
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nv



Ну и ради эксперимента попробуй "91231212" запись обработать независимо, может дело в данных

это рандом номер- вычислить на какой именно записи происходит не представляется возможным.
вообщем при старте процесса задйствованы 10 ядер- и когда происходит нечтно похожее на дедлок - то все 10 ядер так и остаются загружены на 100% при этом дальше процесс уже не идет
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063209
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да добавьте еще пару петабайт памяти, у вас же крутая контора вроде? не то что наши Рога и Копыта

При дэдлоке обычно cpu не жгется, по симптомам больше похоже на livelock. GC тоже врядли, ибо он рано или поздно все же умер с OutOfMemory. Что-то более конкретное сказать не представляется возможным, ибо задача формулируется - у меня там чото не работает, я хз чо и как, но не охота выставлять себя дауном, поэтому вверну пару умных слов - потоки, дедлок, блокировки.

Совет насчет VisualVm либо профайлера - верный, нужно снять треддамп и посомтреть чем заняты потоки, от этого и плясать. Без кода врядли прогресс будет в решении проблемы
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063213
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Всем привет
Есть кусок кода- который выполняется в многопоточном режиме- в чем суть


Вы как поток организовываете? Это контролируемый процесс типо pool executor или просто как на душу ляжет есть данные открываете новый thread?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063224
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг.

Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана
выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например.
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063232
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>иду на сервер - смотрю что там - там на 100% загружены 10 ядер
===
В прошлый вопрос вы всех подняли на уши а у вас БД встала.
В этот раз каспер начал проверять диски а вы опять всех на уши.
Вам не доходит что надо набирать информацию...логи...дампы...а не гадать на гуще.
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063233
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи
=== то же самое что и в первый раз - БД исключили что она умирает на 900к записей?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063235
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг.

Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана
выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например.

+1
Какая девичья память у ТС
Две недели назад был такой же вопрос.
Memory leak
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063259
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот интересно у меня на одном из проектов ПМД вколотили. так оно всегда теперь ругается когда начинаешь там сам тредами жонглировать. через экзекутор там или еще хуже.

мне кажется вполне осбосновано.
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063262
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
вот интересно у меня на одном из проектов ПМД вколотили

вот интересно, все поняли твои три буквы ПМД?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063361
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergunka
asv79
Всем привет
Есть кусок кода- который выполняется в многопоточном режиме- в чем суть


Вы как поток организовываете? Это контролируемый процесс типо pool executor или просто как на душу ляжет есть данные открываете новый thread?

Код: java
1.
Executors.newWorkStealingPool(количество потоков)
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063363
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,
>прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи
=== то же самое что и в первый раз - БД исключили что она умирает на 900к записей?

бд не умирает ,она,по крайне мере в логах все норм
ну и до обновления данных - все было норм- спокойно держала нагрузку такую и принимала от 1,5 и выше записей
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063365
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг.

Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана
выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например.

я с тобой согласен что если бы 1.7 просто превратились в 900 к то вопросов бы я не задавал тут- проблема в том,что приложение не завершает свою работу ,при этом ядра ,нагружены на 100ку
очень похоже на какую то блокировку потоков ,но как тут выше отписались при дедлоке ядра не грузятся на 100%
а тут картина такая что именно на 100ку все загружено .-Отпускает только тогда когда ты стопаешь приложение.
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063367
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>бд не умирает ,она,по крайне мере в логах все норм
= ты выше сказал что в логах нет exception.
Это все?
Если бд тормозит и виснет то в логах будет тоже чисто.
Не логично?
Просто заремуй запись в бд и проверь опять.
2. Что значит до обновления данных. Странная фраза по отношению к бд.
Есть CRUD это 4 операции. А у тебя что за фраза?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063368
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
mayton прав а ты нет.
Просто меньше болтай и исключи влияние бд. Вот и всё
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063370
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

>Отпускает только тогда когда ты стопаешь приложение.
== а кроме стоп крана что умеем? Профиоировать умеем, когда определяют какой метод занимает 90 процентов времени.
Или какие потоки спят.
Логи дядя будет приводить?
Или ты в отпуске?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063371
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
вот интересно у меня на одном из проектов ПМД вколотили. так оно всегда теперь ругается когда начинаешь там сам тредами жонглировать. через экзекутор там или еще хуже.

мне кажется вполне осбосновано.

дело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет

суть вообще этого приложения
перегон данных из монго в постргрес

Я склонялся к дед локу ,но раз при дедлоке не может быть 100% загрузки ядер ,буду сейчас вычленять опытным путем ,какой именно элемент данных вызывает это состояние приложения.

пс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет)
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063372
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,

>Отпускает только тогда когда ты стопаешь приложение.
== а кроме стоп крана что умеем? Профиоировать умеем, когда определяют какой метод занимает 90 процентов времени.
Или какие потоки спят.
Логи дядя будет приводить?
Или ты в отпуске?

петро какой метод занимает 100 я тебе и без профилирофчика скажу - тот который и есть многопоточный)
я туда накинул маркеров - так вот все идет хорошо ,где то 900к элементов обрабатываются и далее происходит что то ,что не дает никаких ошибок ни в бд,ни в приложении,ни на серваке,при этом по маркерам я вижу что метод не закончил свою работу
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 }
    log.info("Ждем потоки");

    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);

    if (!executorService.isTerminated()) {
      executorService.shutdownNow();
    }
    log.info("Работа завершена");
  }


вот тут я не дожидаюсь сообщения "ждем потоки" ,что говорит,что потоки чем то заняты

мб это livelock
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063373
Для поиска проблемы нужно всего две вещи:
1. Определить какие потоки грузят
2. И на какой строке

Я так понимаю что с 1ым проблем нет. Если есть, то в Линухе можно выводить потоки и насколько они загружают CPU с помощью top (в интернетах ищем по linux lightweight processes). Там же мы можем увидеть ID потока, который потом можно сопоставить с тем что выводит thread dump. Они правда выводят в разных системах исчисления, нужно будет пересчитать.

Ну и на какой строке можно легко определить все тем же thread dump'ом:
Код: powershell
1.
jcmd <PID> Thread.print



Ну а там уже по строке кода должно быть понятно. Если не понятно - нужно нам предоставить кусок кода который грузит. Может оказаться все тот же GC как уже предлагали выше, это будет свидетельствовать что создается слишком много объектов. Используется ли Hibernate для работы с БД и, если да, очищается ли его сессия?

Также обычно СУБД позволяют определить какие записи заблокированы, какие запросы счас выполняются и пр. Это тоже может натолкнуть на мысли.

В общем, @asv79, нужно чтоб ты хоть как-то начал диагностировать проблему. Пока звучит будто все телодвижения были нерешительны и наугад. Из вопроса даже не понятно - это java процесс вообще грузит CPU?

авторпетро какой метод занимает 100 я тебе и без профилирофчика скажу - тот который и есть многопоточный)
Нужно знать точно строку. И нужно понимать это просто java код который ходит циклами, или это системный вызов.
автордело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет
Значит он всегда работал неверно, и проблема проявляется только при определенных условиях/объемах данных.
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063378
авторпс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет)Стоит уменьшить кол-во выделяемой памяти JVM, тогда проблема скорей всего воспроизведется раньше. Еще как вариант - увеличить кол-во потоков, но это усложнить последующий анализ.

PS: Хм.. Я не всегда могу редактировать свои сообщения?
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063382
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>который и есть многопоточный)
Я не ожидал что у тебя внутри метода нет подметодов каждый со своим временем.
)))))))
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063384
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

автордело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет
Значит он всегда работал неверно, и проблема проявляется только при определенных условиях/объемах данных.
так объем не изменился по сути 17 гиг против 17.5,а вот что то в данных не то - видимо это и есть причина сейчас буду вычленять проблему
пс.сейчас я прогоню заново и пойму хотя бы на каком элменте происходит эта проблема
ибо всегда оно в одном и том же месте- далее я сделаю прогон тех элементов которые попадают в этот пул( там 8 потоков - каждый берет в процес по элементу)
прогоню отдельно каждый из них и найду хотя бы тот элемент ,который вызывает эту проблему
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063385
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
log.info("Ждем потоки");

    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);

    if (!executorService.isTerminated()) {
      executorService.shutdownNow();
    }
    log.info("Работа завершена");


Ты боишься внутри расставить маркеры?
Тебе уже 4 мембера сказали "работай".
...
Рейтинг: 0 / 0
Блокировка потоков
    #40063387
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,
>который и есть многопоточный)
Я не ожидал что у тебя внутри метода нет подметодов каждый со своим временем.
)))))))

все там есть,петро не мешай плиз в этой теме - дай люди со знаниями накинут варинты проблемы.
...
Рейтинг: 0 / 0
25 сообщений из 114, страница 1 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировка потоков
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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