Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
1

Определить взаимную блокировку (диагностика)

22.09.2016, 15:41. Просмотров 256. Ответов 6
Метки нет (Все метки)

как правильно определить причину взаимной блокировки в большом приложении, в большом проекте? Как правильно собрать дамп потоков и его проанализировать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 15:41
Ответы с готовыми решениями:

Сма Beko WML 15085 D, Не видит блокировку люка.., Не видит блокировку люка
Попала в ремонт СМА BEKO WML15085 D. Зависла на одной программе, блокирует люк и стоит... Значок...

Получить взаимную корреляционную функцию сигналов
очень нужна помощь, рассчитал плотности распределения вероятностей двух сигналов: первый...

Вычислить взаимную информацию двух случайных величин
Помогите, пожалуйста, сделать программу на паскале ABC или Delphi. Задание 2: взаимная информация...

Вычислить взаимную индуктивность двух коаксиальных колец
Вычислить взаимную индуктивность М двух коаксиальных колец радиусами R1 и R2, находящихся на...

Напишите функцию, аналогичную встроенной функции замены subst в спи-ске s взаимную замену x на y
Напишите функцию, аналогичную встроенной функции замены subst в списке s выражения x на y, но...

6
KEKCoGEN
Эксперт Java
2159 / 2013 / 523
Регистрация: 28.12.2010
Сообщений: 7,977
22.09.2016, 15:48 2
yura91, kill -3 <pid> дает дамп потоков. Опций для просмотра и анализа дампов миллион. Можно в блокноте смотреть, а можно скачать всякие программы утилиты
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
22.09.2016, 15:57  [ТС] 3
А как по самому дампу понять где была взаимная блокировка? Это место как то помечается в дампе можно пример дампа какого нибудь с блокировкой? И как там это место обозначается?
0
turbanoff
Эксперт Java
4026 / 3761 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
22.09.2016, 15:58 4
Чтобы получить дамп потоков есть утиллита jstack (входит в поставку JDK).
Код
jstack -m <pid>
Если процесс JVM завис совсем
Код
jstack -F -m <pid>
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
22.09.2016, 16:25  [ТС] 5
Ну дамп потоков я получу а дальше как по этому дампу понять причину deadlock как она обозначается в самом дампе? Ну по этому дампу можно понять в каком месте ошибка?

Добавлено через 1 минуту
есть какой то инструмент работы с самими дампами? или как их расшифровывать?
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
22.09.2016, 16:47  [ТС] 6
Да там же как то при помощи DDMS Android Studio можно проще определить да? И еще не подскажите как правильно разобрать сам дамп потоков? Там есть id потока и прочее. Можете подробнее объяснить это все если можно?

Добавлено через 7 минут
Например если такой дамп получился
Код
"Thread-23" daemon prio=5 tid=22 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4056fbc0 self=0x1b5da0
  | sysTid=764 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1793248
  at android.os.MessageQueue.nativePollOnce(Native Method)
  at android.os.MessageQueue.next(MessageQueue.java:119)
  at android.os.Looper.loop(Looper.java:117)
  at com.que.gpslogger.module.b.a.run((null):-1)
 
"Thread-22" prio=5 tid=21 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40573d58 self=0x1b6768
  | sysTid=765 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1796256
  at java.lang.Object.wait(Native Method)
  - waiting on <0x40573cf0> (a com.que.gpslogger.d.q)
  at java.lang.Object.wait(Object.java:395)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
 
"Thread-21" prio=5 tid=20 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4056e678 self=0x1b4b18
  | sysTid=763 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1789008
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4056e5c0> (a com.que.gpslogger.d.n)
  at java.lang.Object.wait(Object.java:395)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
 
"Thread-19" prio=5 tid=18 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4056d860 self=0x1b3f70
  | sysTid=761 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1786024
  at java.lang.Object.wait(Native Method)
  - waiting on <0x40573458> (a java.lang.VMThread)
  at java.lang.Object.wait(Object.java:358)
  at java.lang.Thread.join(Thread.java:914)
  at com.que.gpslogger.d.k.c((null):-1)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
Как его разобрать где здесь deadlock?
0
turbanoff
Эксперт Java
4026 / 3761 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
22.09.2016, 21:56 7
Ну, для начала стоит понять, почему вы решили, что у вас deadlock?
Обычно, это значит, что какой-то интересующий вас поток висит и ждёт захвата лока. Какой из этих потоков вам интересен?

PS. Наименование потоков Thread-<num> - это говнокод. Всегда давайте потокам значимые имена.

Добавлено через 2 минуты
В общем предвосхищая будущие вопросы: никакого true-way для разбора deadlock-ов нет. Вы просто смотрите на stack trace интересующих вас потоков, и пытаетесь понять, почему они заблокировались. Очень часто - это супер-нетривиальная задача.
0
22.09.2016, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 21:56

Во всех файлах, расположенных в заданном поддереве, произвести взаимную замену двух заданных символов
Во всех файлах, расположенных в заданном поддереве, произвести взаимную замену двух заданных...

Обойти блокировку
&lt;input type=&quot;button&quot; value=&quot;нажать&quot; id=&quot;raz&quot;/&gt; &lt;script&gt;...

fly снять блокировку
Проблема такая , девочка не правильно ввела , а точнее пальцем сняла блокировку и тел....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru