宕機案例分析1

2021-07-09 03:34:06 字數 3717 閱讀 5177

問題描述:

***x  海外專案待機開機壓測時出現宕機,遙控器無響應。

問題分析:

出現問題時有產生如下backtrace:

f/libc    (  523):@@@ aborting: libc: argument is invalid heap address in dlfree addr=0x70ef03a8

#00  pc 0000f13c /system/lib/libc.so

#01  pc 00011ee3 /system/lib/libc.so (dlfree+1458)

#02  pc 0000d053 /system/lib/libc.so (free+10)

#03  pc 00008163 /system/lib/libcutils.so

#04  pc00008f93  /system/lib/libcutils.so (localtime_tz+34)

#05  pc 00048a2b /system/lib/libandroid_runtime.so (android::time::settonow()+38)

#06  pc 00063e13 /system/lib/libandroid_runtime.so

壓測一:可以看出是free乙個非法堆位址引起的,懷疑有可能呼叫時傳入了非法引數引起,所以加了debug資訊除錯,繼續壓測發現傳入引數一切正常,還是出現了上述錯誤。

//下面debug資訊正常

i/log_println(  523):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)

i/log_time(  523): time::settonow()seconds:0x76512bfc  this->t:0x76512c10 timezone:gmt+10:00

i/log_println(  523):android_text_format_time_settonow: timezone: gmt+10:00

排除錯誤。

壓測二:懷疑上述問題和android設定時間有關,android支援gmt[+|-]hh[[:]mm]"和("america/los_angeles")兩種時區格式,

修改apk的設定時區方法為("america/los_angeles"),初步壓測未出現宕機,得出如下結論:

當給android設定的時區為"gmt[+|-]hh[[:]mm]"時,會有概率性宕機,當給android設定的時區為地區(例如:("america/los_angeles"))時則無概率性宕機問題(6臺機器壓測一天沒發現)。

壓測三:

定位code:使用arm-linux-androideabi-objdump –s d–l命令分別disassemble cutils.so和libandroid_runtime.so

例如:arm-linux-androideabi-objdump-s -d -l libcutils.so  > libcutils.dis

//下面backtrace是新增debug資訊引入的,和出現問題的backtrace crash點一致

#03  pc 00008131 /system/lib/libcutils.so

#04  pc 00008fbf /system/lib/libcutils.so (mktime_tz+38)

#05  pc 00048a45 /system/lib/libandroid_runtime.so (android::time::tomillis(bool)+12)

在libcutils.dis中找到下面資訊:

00008f54:

mktime_tz():

則(mktime_tz+38) =00008f54+ 38 = 00008f8b

這裡(android::time::settonow()+38) 應該是(android::time::settonow()+0x26),  所以落點是00008f7a.

00008f8b

落在下面區間

/home/xa00087/72668_tcl/android/android/system/core/libcutils/tztime.c:1166

8f82: 4d6c      ldr          r5, [pc, #432]      ; (9134 )

8f84:  f50d 6100           add.w   r1, sp, #2048       ; 0x800

8f88: 310c      adds      r1, #12

8f8a: 2201      movs     r2, #1

8f8c: 447d                    add        r5, pc

8f8e: 4628      mov       r0,r5

8f90:  f7ff f878             bl            8084

8f94: b130                    cbz         r0, 8fa4

tztime.c:1166 處程式碼如下:

if(tzload(gmt, sp, true) != 0

tztime.c  tzload:

if (g_cachenames[i])

懷疑有reentry 導致導致free了乙個無效指標。

新增debug資訊進行壓測:

i/log_println(  521):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)

i/log_println(  521):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)

i/log_time(  521):time::settonow() seconds:0x76ab1bfc  this->t:0x76ab1c10timezone:gmt+10:00

i/log_time(  521):time::settonow() seconds:0x7628dbfc  this->t:0x7628dc10timezone:gmt+10:00

e/cutils (  521): g_lastcache_before++= 3

e/cutils (  521): g_lastcache_before++= 3

e/cutils (  521): g_lastcache_after++= 4

e/cutils (  521): g_lastcache_after++= 5

e/cutils (  521): g_lastcache= 0

e/cutils (  521): g_lastcache= 0

證明的確存在重入問題。

問題code:

g_lastcache++;

if (g_lastcache>= cache_count)

i = g_lastcache;

if(g_cachenames[i])

此題懷疑是

android

原始碼的乙個

bug,"gmt[+|-]hh[[:]mm]"格式設定時區是時序上存在問題,會存在上面介面的重入問題。

解決方案: 1.

使用("america/los_angeles")時區格式;(4臺tv壓測48小時ok)

2.呼叫settonow()時新增互斥控制;

宕機問題分析

先說說我遇到的宕機問題吧,都是與記憶體有關的 1 現象 主機板上電後,串列埠無輸出,沒反應。a 宕機原因 發現ddr部分的濾波電容脫落了好幾顆,運輸過程造成的 加上去就ok了。b 宕機原因 記憶體虛焊。c 宕機原因 記憶體vref參考電壓的,電阻值搞錯,120r給貼成0r,修改後ok。d 宕機原因 ...

android 宕機分析過程

宕機 這裡說的宕機就是凍屏,停留在乙個介面沒反應。宕機問題很少遇到,且大多不是乙個用層問題,下面簡單說下可能造成宕機的原因和分析需要資訊 宕機可能原因 1.輸入系統或者輸入驅動問題 2.系統邏輯問題或阻塞 3.su cefinger問題 4.顯示系統或lcm驅動問題 1.確認adb是否可用 2.抓取...

電腦宕機故障分析

電腦宕機故障分析 案例一 故障現象 一台配置為mmx166處理器 t2p4主機板,32mb記憶體和3.2gb硬碟的相容電腦,使用的作業系統為windows98。開機時電源指示燈亮,電源風扇也正常轉動,但計算機並沒有啟動,也沒有出現開機自檢畫面。分析及處理 據該機使用者稱,最後一次使用該機的時間是4月...