|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Всем привет Есть кусок кода- который выполняется в многопоточном режиме- в чем суть Код не менялся,ничего не менялось- лишь нарастал объем данных ,которые этот код обрабатывал и вот в какой то момент я обнаруживаю что результат работы кода - условно посчиаем его в записях в бд стал 900 к ,вместо положенных 1.7 млн иду на сервер - смотрю что там - там на 100% загружены 10 ядер при этом прилоежние работу не продолжает но и не стопается ( добавил специально логи ) очень похоже на дед лок. прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи все дедлочится и привет.Но разве такое возможно чтобы дедлок был всегда идентичен- тоесть работает приложение все норм и бац на 91231212 записи все блочится и на следующий прогон именно на том же порядковом номере . Есть еще предположение что приложение упирается в лимиты по памяти и какие то потоки не могут получить свои данные изза этого и все так же виснет хз в логах ошибок нет ни в приложении,ни от серевера,в логах бд тоже ничего по дедлоку тоже вопрос - почему раньше все работало - а сейчас нет- причем ладно бы изза увеличения даных это было где то в конце - нет же - на середине блокируется все ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 17:47 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
дедлок - это взаимная бокировка. А блокировка не потребляет 100% CPU (если конечно она не на CAS'ах). Для начала лучше подключись через jvisualvm к приложению и сними семплирование, или используй JFR, ну или по старинке - по тред-дампам посмотри где потоки чаще всего висят. А может и вообще что все эти 100% CPU - это garbage collector (это тоже должно быть видно через метрики или тот же JMX). Ну и ради эксперимента попробуй "91231212" запись обработать независимо, может дело в данных ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 18:14 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
pavel_nv Ну и ради эксперимента попробуй "91231212" запись обработать независимо, может дело в данных это рандом номер- вычислить на какой именно записи происходит не представляется возможным. вообщем при старте процесса задйствованы 10 ядер- и когда происходит нечтно похожее на дедлок - то все 10 ядер так и остаются загружены на 100% при этом дальше процесс уже не идет ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 18:43 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Да добавьте еще пару петабайт памяти, у вас же крутая контора вроде? не то что наши Рога и Копыта При дэдлоке обычно cpu не жгется, по симптомам больше похоже на livelock. GC тоже врядли, ибо он рано или поздно все же умер с OutOfMemory. Что-то более конкретное сказать не представляется возможным, ибо задача формулируется - у меня там чото не работает, я хз чо и как, но не охота выставлять себя дауном, поэтому вверну пару умных слов - потоки, дедлок, блокировки. Совет насчет VisualVm либо профайлера - верный, нужно снять треддамп и посомтреть чем заняты потоки, от этого и плясать. Без кода врядли прогресс будет в решении проблемы ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 22:22 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79 Всем привет Есть кусок кода- который выполняется в многопоточном режиме- в чем суть Вы как поток организовываете? Это контролируемый процесс типо pool executor или просто как на душу ляжет есть данные открываете новый thread? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 22:39 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг. Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 23:37 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, >иду на сервер - смотрю что там - там на 100% загружены 10 ядер === В прошлый вопрос вы всех подняли на уши а у вас БД встала. В этот раз каспер начал проверять диски а вы опять всех на уши. Вам не доходит что надо набирать информацию...логи...дампы...а не гадать на гуще. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 00:25 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, >прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи === то же самое что и в первый раз - БД исключили что она умирает на 900к записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 00:27 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
mayton Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг. Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например. +1 Какая девичья память у ТС Две недели назад был такой же вопрос. Memory leak ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 00:39 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
вот интересно у меня на одном из проектов ПМД вколотили. так оно всегда теперь ругается когда начинаешь там сам тредами жонглировать. через экзекутор там или еще хуже. мне кажется вполне осбосновано. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 11:38 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
andreykaT вот интересно у меня на одном из проектов ПМД вколотили вот интересно, все поняли твои три буквы ПМД? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 11:46 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Sergunka asv79 Всем привет Есть кусок кода- который выполняется в многопоточном режиме- в чем суть Вы как поток организовываете? Это контролируемый процесс типо pool executor или просто как на душу ляжет есть данные открываете новый thread? Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:37 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
PetroNotC Sharp asv79, >прогнал все это дело 4 раза - всегда блочится похоже в одном и том же месте тоесть грубо говоря на 900 к записи === то же самое что и в первый раз - БД исключили что она умирает на 900к записей? бд не умирает ,она,по крайне мере в логах все норм ну и до обновления данных - все было норм- спокойно держала нагрузку такую и принимала от 1,5 и выше записей ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:40 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
mayton Если 1.7 превратилось в 900 то это еще не факт что виновата мультипоточность. Это может быть просто баг. Тоесть нужно искать сначала простое объяснение вещам. В многопользовательской среде база тоже не обязана выдавать одно и тоже число data-rows. В базе бывают плановые ETL процессы например. я с тобой согласен что если бы 1.7 просто превратились в 900 к то вопросов бы я не задавал тут- проблема в том,что приложение не завершает свою работу ,при этом ядра ,нагружены на 100ку очень похоже на какую то блокировку потоков ,но как тут выше отписались при дедлоке ядра не грузятся на 100% а тут картина такая что именно на 100ку все загружено .-Отпускает только тогда когда ты стопаешь приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:44 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, >бд не умирает ,она,по крайне мере в логах все норм = ты выше сказал что в логах нет exception. Это все? Если бд тормозит и виснет то в логах будет тоже чисто. Не логично? Просто заремуй запись в бд и проверь опять. 2. Что значит до обновления данных. Странная фраза по отношению к бд. Есть CRUD это 4 операции. А у тебя что за фраза? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:48 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, mayton прав а ты нет. Просто меньше болтай и исключи влияние бд. Вот и всё ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:49 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, >Отпускает только тогда когда ты стопаешь приложение. == а кроме стоп крана что умеем? Профиоировать умеем, когда определяют какой метод занимает 90 процентов времени. Или какие потоки спят. Логи дядя будет приводить? Или ты в отпуске? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:53 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
andreykaT вот интересно у меня на одном из проектов ПМД вколотили. так оно всегда теперь ругается когда начинаешь там сам тредами жонглировать. через экзекутор там или еще хуже. мне кажется вполне осбосновано. дело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет суть вообще этого приложения перегон данных из монго в постргрес Я склонялся к дед локу ,но раз при дедлоке не может быть 100% загрузки ядер ,буду сейчас вычленять опытным путем ,какой именно элемент данных вызывает это состояние приложения. пс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:55 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
PetroNotC Sharp asv79, >Отпускает только тогда когда ты стопаешь приложение. == а кроме стоп крана что умеем? Профиоировать умеем, когда определяют какой метод занимает 90 процентов времени. Или какие потоки спят. Логи дядя будет приводить? Или ты в отпуске? петро какой метод занимает 100 я тебе и без профилирофчика скажу - тот который и есть многопоточный) я туда накинул маркеров - так вот все идет хорошо ,где то 900к элементов обрабатываются и далее происходит что то ,что не дает никаких ошибок ни в бд,ни в приложении,ни на серваке,при этом по маркерам я вижу что метод не закончил свою работу Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
вот тут я не дожидаюсь сообщения "ждем потоки" ,что говорит,что потоки чем то заняты мб это livelock ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 17:59 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Для поиска проблемы нужно всего две вещи: 1. Определить какие потоки грузят 2. И на какой строке Я так понимаю что с 1ым проблем нет. Если есть, то в Линухе можно выводить потоки и насколько они загружают CPU с помощью top (в интернетах ищем по linux lightweight processes). Там же мы можем увидеть ID потока, который потом можно сопоставить с тем что выводит thread dump. Они правда выводят в разных системах исчисления, нужно будет пересчитать. Ну и на какой строке можно легко определить все тем же thread dump'ом: Код: powershell 1.
Ну а там уже по строке кода должно быть понятно. Если не понятно - нужно нам предоставить кусок кода который грузит. Может оказаться все тот же GC как уже предлагали выше, это будет свидетельствовать что создается слишком много объектов. Используется ли Hibernate для работы с БД и, если да, очищается ли его сессия? Также обычно СУБД позволяют определить какие записи заблокированы, какие запросы счас выполняются и пр. Это тоже может натолкнуть на мысли. В общем, @asv79, нужно чтоб ты хоть как-то начал диагностировать проблему. Пока звучит будто все телодвижения были нерешительны и наугад. Из вопроса даже не понятно - это java процесс вообще грузит CPU? авторпетро какой метод занимает 100 я тебе и без профилирофчика скажу - тот который и есть многопоточный) Нужно знать точно строку. И нужно понимать это просто java код который ходит циклами, или это системный вызов. автордело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет Значит он всегда работал неверно, и проблема проявляется только при определенных условиях/объемах данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:00 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
авторпс.я б собственно тему не создавал ,но каждый прогон - это 4 часа - может тут кто мысль подкинет)Стоит уменьшить кол-во выделяемой памяти JVM, тогда проблема скорей всего воспроизведется раньше. Еще как вариант - увеличить кол-во потоков, но это усложнить последующий анализ. PS: Хм.. Я не всегда могу редактировать свои сообщения? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:27 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
asv79, >который и есть многопоточный) Я не ожидал что у тебя внутри метода нет подметодов каждый со своим временем. ))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:41 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev автордело в том,что код то не менялся - он работал и работал себе и тут новая дата подъехала и привет так объем не изменился по сути 17 гиг против 17.5,а вот что то в данных не то - видимо это и есть причина сейчас буду вычленять проблему пс.сейчас я прогоню заново и пойму хотя бы на каком элменте происходит эта проблема ибо всегда оно в одном и том же месте- далее я сделаю прогон тех элементов которые попадают в этот пул( там 8 потоков - каждый берет в процес по элементу) прогоню отдельно каждый из них и найду хотя бы тот элемент ,который вызывает эту проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:44 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Ты боишься внутри расставить маркеры? Тебе уже 4 мембера сказали "работай". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:45 |
|
Блокировка потоков
|
|||
---|---|---|---|
#18+
PetroNotC Sharp asv79, >который и есть многопоточный) Я не ожидал что у тебя внутри метода нет подметодов каждый со своим временем. ))))))) все там есть,петро не мешай плиз в этой теме - дай люди со знаниями накинут варинты проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 18:46 |
|
|
start [/forum/topic.php?fid=59&msg=40063378&tid=2120472]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
25ms |
get topic data: |
2ms |
get forum data: |
0ms |
get page messages: |
520ms |
get tp. blocked users: |
0ms |
others: | 291ms |
total: | 862ms |
0 / 0 |