2011-03-16 2 views
2

Android 서비스를 실행할 때 ANR이 발생하는 경우가 있습니다. 교착 상태로 인해 일어난 것 같습니다.Android가 교착 상태에 있음

Android 또는 Eclipse에서 교착 상태를 모니터링하는 쉬운 방법이 있습니까? 어떤 스레드가 어떤 잠금을 유지하는지 보여주는 유틸리티와 같은?

그리고 traces.txt 파일을보고 교착 상태를 파악할 수있는 방법이 있습니까?

내 DDM의 어떤 플랫폼이 어려운에서 교착 상태를 고정 충돌

02-15 18:09:01.046: INFO/Process(90): Sending signal. PID: 450 SIG: 3 
02-15 18:09:01.046: INFO/dalvikvm(450): threadid=3: reacting to signal 3 
02-15 18:09:01.056: INFO/dalvikvm(450): Wrote stack traces to '/data/anr/traces.txt' 
02-15 18:09:01.076: INFO/Process(90): Sending signal. PID: 10548 SIG: 9 
02-15 18:09:01.076: ERROR/ActivityManager(90): ANR in com.abc.cm.core 
02-15 18:09:01.076: ERROR/ActivityManager(90): Reason: Executing service com.abc.cm.core/.WorkOrderManager 
02-15 18:09:01.076: ERROR/ActivityManager(90): Load: 1.46/1.16/1.05 
02-15 18:09:01.076: ERROR/ActivityManager(90): CPU usage from 19462ms to 1067ms ago: 
02-15 18:09:01.076: ERROR/ActivityManager(90): abc.cm.core: 13% = 12% user + 1% kernel/faults: 1360 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): mmcqd: 4% = 0% user + 4% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): system_server: 3% = 2% user + 1% kernel/faults: 473 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): zygote: 2% = 2% user + 0% kernel/faults: 90 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): adbd: 1% = 0% user + 1% kernel/faults: 1042 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): m.abc.unten: 0% = 0% user + 0% kernel/faults: 203 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): ndroid.launcher: 0% = 0% user + 0% kernel/faults: 802 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): droid.wallpaper: 0% = 0% user + 0% kernel/faults: 109 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): ndroid.settings: 0% = 0% user + 0% kernel/faults: 44 minor 
02-15 18:09:01.076: ERROR/ActivityManager(90): dhd_dpc: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): events/0: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): logcat: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): +andisk.api.test: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): +iTestFwService1: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): +sh: 0% = 0% user + 0% kernel 
02-15 18:09:01.076: ERROR/ActivityManager(90): TOTAL: 40% = 23% user + 16% kernel + 0% iowait + 0% softirq 
02-15 18:09:01.096: INFO/ActivityManager(90): Process com.abc.cm.core (pid 10548) has died. 
+0

서비스 코드를 게시하십시오. –

+2

/data/anr/traces.txt에 스택 추적을 볼 수 있습니까? 두 개의 스레드가 모니터에 잠겨 있으면이를 볼 수 있습니다. (MONITOR 상태의 스레드를 찾으십시오.) 장치가 루팅 된 경우 "kill -3 "을 수행하여 언제든지 로그에서 스택 추적을 얻을 수 있습니다. – fadden

+2

실제로 나는 ddms에서 선택한 프로세스에 대한 스레드 목록을 볼 수 있음을 알았습니다. 나는 "모니터"상태의 쓰레드를 찾는다. 파일과 줄 번호를 포함하여 ddms에서 호출 스택을 볼 수도 있습니다. 그것이 내가 지금 사용하고있는 것입니다. –

답변

0

시 같은 외모를 기록합니다. 내가 안드로이드에서 아는 유일한 방법은 각 잠금/잠금 해제/otherExpensiveFunctions 전후에 일부 로깅 (예 : Log.d 사용)을 추가하는 것입니다.

+0

그건 내일 아침 계획이에요. 나는 선택의 여지가별로 없다고 생각합니다. –

관련 문제