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

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

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

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

Отловить блокировку экрана
Добрый день! Хотелось бы отловить блокировку экрана и, например, запустить...

Как сделать блокировку экрана
Как сделать экран блокировки с паролем при разблокировки телефона?

Программно включить экран не отключая блокировку
Добрый вечер! Появилась нужда во включении экрана (включении подсветки) не...

Отключить блокировку экрана при бездействии
Как можно отключить блокировку экрана, если приложение активно, но пользователь...

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

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

Добавлено через 1 минуту
есть какой то инструмент работы с самими дампами? или как их расшифровывать?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,326
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
4016 / 3751 / 741
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 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

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

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

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


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

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

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