日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android的BUG(四) - Android app的卡死问题

發(fā)布時間:2024/4/17 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android的BUG(四) - Android app的卡死问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

做android,免不了要去運(yùn)行一些跑分程序,常用的跑分程序有quadrant(象限),nbench,安兔兔等。作為系統(tǒng)工程師,對這些跑分 程序都非常的不屑,這個只能是一個不客觀的參考,但客戶都喜歡拿這個比較,于是乎,各家各廠都或多或少會針對此做優(yōu)化(甚至是作弊或直接的作假),這可不 是什么好現(xiàn)象,浮夸的厲害,到處放衛(wèi)星,畝產(chǎn)萬斤的,弄的我們這些老實(shí)人都很被動。不過這里就不說這些破事了。國內(nèi)大家常用的跑分程序,就是安兔兔了,但 是不知道大家有沒有發(fā)現(xiàn),安兔兔跑起來后,有時會卡住不動,除了返回鍵和觸摸操作都沒什么用。

出現(xiàn)這一問題時,home鍵可以退出,繼續(xù)運(yùn)行其他應(yīng)用,說明系統(tǒng)此時還是正常的。Top,vmstat看一下,也沒有高CPU/IO占用率的進(jìn)程,ps –t看一下,也沒發(fā)現(xiàn)D狀態(tài)的線程。不過,<span style="ps –t倒是發(fā)現(xiàn)了一個現(xiàn)象:

app_47??? 9691? 8787? 610076 28768 ffffffff 2aac4424 S com.antutu.ABenchMark app_47??? 9706? 9691? 609060 24476 80061b00 2aac5434 S com.antutu.ABenchMark

出現(xiàn)了同名的進(jìn)程!這很奇怪~
看這兩個進(jìn)程的父進(jìn)程, 一個是zygote, 另外一個,則是com.antutu.ABenchMark自己。由此大約可以推斷出來,后一個進(jìn)程是前一個進(jìn)程fork出來的,fork后還沒來得及exec就卡住了。

接上adb,看下兩個進(jìn)程的狀態(tài)吧:

Process: 9691 (gdb) bt #0? read () at bionic/libc/arch-mips/syscalls/read.S:13 #1? 0x2ad6d7d0 in executeProcess (env=0x1c7e60, javaCommands=0x2c118ab8, javaEnvironment=0x0, javaWorkingDirectory=0x0, inDescriptor=0x2c118af0, outDescriptor=0x2c118b00, errDescriptor=0x2c118b10, redirectErrorStream=0 '\000') at libcore/luni/src/main/native/java_lang_ProcessManager.cpp:165 #2? ProcessManager_exec (env=0x1c7e60, javaCommands=0x2c118ab8, javaEnvironment=0x0, javaWorkingDirectory=0x0, inDescriptor=0x2c118af0, outDescriptor=0x2c118b00, errDescriptor=0x2c118b10, redirectErrorStream=0 '\000') at libcore/luni/src/main/native/java_lang_ProcessManager.cpp:240 #3? 0x2b8cccc4 in call_it () at external/libffi/src/mips/o32.S:145 #4? 0x0026eb78 in ?? ()

沒什么特別的,確實(shí)是卡在process的fork中。

再看看process 9706

(gdb) info thread * 1 Thread 9706? __futex_syscall4 () at bionic/libc/arch-mips/bionic/atomics_mips.S:218 (gdb) bt #0? __futex_syscall4 () at bionic/libc/arch-mips/bionic/atomics_mips.S:218 #1? 0x2aabc288 in _normal_lock (mutex=0x2ab2142c) at bionic/libc/bionic/pthread.c:951 #2? pthread_mutex_lock (mutex=0x2ab2142c) at bionic/libc/bionic/pthread.c:1041 #3? 0x2aabf848 in dlmalloc (bytes=4096) at bionic/libc/bionic/dlmalloc.c:4261 #4? 0x2aace004 in __smakebuf (fp=0x2ab21598) at bionic/libc/stdio/makebuf.c:62 #5? 0x2aad4658 in __swsetup (fp=0x2ab21598) at bionic/libc/stdio/wsetup.c:73 #6? 0x2aace6a0 in putc_unlocked (c=48, fp=<value optimized out>) at bionic/libc/stdio/putc.c:46 #7? 0x2aace744 in putc (c=48, fp=0x2ab21598) at bionic/libc/stdio/putc.c:64 #8? 0x2aae44c0 in cpuacct_add (uid=<value optimized out>) at bionic/libc/bionic/cpuacct.c:55 #9? 0x2aae57b0 in fork () at bionic/libc/bionic/fork.c:57 #10 0x2ad6d764 in executeProcess (env=0x1c7e60, javaCommands=0x2c118ab8, javaEnvironment=0x0, javaWorkingDirectory=0x0, inDescriptor=0x2c118af0, outDescriptor=0x2c118b00, errDescriptor=0x2c118b10, redirectErrorStream=0 '\000') at libcore/luni/src/main/native/java_lang_ProcessManager.cpp:92 #11 ProcessManager_exec (env=0x1c7e60, javaCommands=0x2c118ab8, javaEnvironment=0x0, javaWorkingDirectory=0x0, inDescriptor=0x2c118af0, outDescriptor=0x2c118b00, errDescriptor=0x2c118b10, redirectErrorStream=0 '\000') at libcore/luni/src/main/native/java_lang_ProcessManager.cpp:240 #12 0x2b8cccc4 in call_it () at external/libffi/src/mips/o32.S:145 #13 0x0026eb78 in ?? () (gdb)

可以看到停在bionic的fork中了,具體函數(shù)是: cpuacct_add(getuid()); 中的fprintf。 錯誤原因從bt上看得到,又是鎖的問題。

這個問題找到原因后,解決方法倒是沒有花什么精力,直接google一下,問題和解決方法都出來了:

https://code.google.com/p/android/issues/detail?id=19916 Comment 1 by gabrb...@gmail.com, Nov 23, 2011 This issue has also been found on ICS.? cpuacct_add should not be doing anything that calls malloc() or free().? Proposed fixes are here: http://review.omapzoom.org/16579 http://review.omapzoom.org/16573


現(xiàn)在越來越多的apk,會偷偷的fork進(jìn)程,執(zhí)行系統(tǒng)中的命令或dump調(diào)試信息,甚至如skype,會一下fork很多自己寫的native服務(wù),看著總歸不是很爽。

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

轉(zhuǎn)載于:https://www.cnblogs.com/Free-Thinker/p/4925085.html

總結(jié)

以上是生活随笔為你收集整理的Android的BUG(四) - Android app的卡死问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。