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

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


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



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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

пс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет)
...
Рейтинг: 0 / 0
17.04.2021, 17:59
    #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
17.04.2021, 18:00
    #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
17.04.2021, 18:27
    #40063378
Блокировка потоков
авторпс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет)Стоит уменьшить кол-во выделяемой памяти JVM, тогда проблема скорей всего воспроизведется раньше. Еще как вариант - увеличить кол-во потоков, но это усложнить последующий анализ.

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

автордело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет
Значит он всегда работал неверно, и проблема проявляется только при определенных условиях/объемах данных.
так объем не изменился по сути 17 гиг против 17.5,а вот что то в данных не то - видимо это и есть причина сейчас буду вычленять проблему
пс.сейчас я прогоню заново и пойму хотя бы на каком элменте происходит эта проблема
ибо всегда оно в одном и том же месте- далее я сделаю прогон тех элементов которые попадают в этот пул( там 8 потоков - каждый берет в процес по элементу)
прогоню отдельно каждый из них и найду хотя бы тот элемент ,который вызывает эту проблему
...
Рейтинг: 0 / 0
17.04.2021, 18:45
    #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
17.04.2021, 18:46
    #40063387
asv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка потоков
PetroNotC Sharp
asv79,
>который и есть многопоточный)
Я не ожидал что у тебя внутри метода нет подметодов каждый со своим временем.
)))))))

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


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