記一次android特殊的OOM經(jīng)歷

最近新版本上線搓逾,測(cè)試同學(xué)新寫了個(gè)變態(tài)的測(cè)試腳本去測(cè)試我們應(yīng)用的性能掸掏,結(jié)果遇到了一個(gè)非常詭異的現(xiàn)象,當(dāng)app運(yùn)行一定的次數(shù)之后拜马,就會(huì)崩潰考抄,由于我們是系統(tǒng)應(yīng)用细疚,崩潰之后,系統(tǒng)會(huì)重新拉起APP川梅。所以該問題一直沒有暴露出來。直到最近然遏。

日志

oom的相關(guān)日志

06-17 22:25:48.366 12937 12937 W System.err: java.lang.OutOfMemoryError: Could not allocate JNI Env
06-17 22:25:48.366 12937 12937 W System.err:    at java.lang.Thread.nativeCreate(Native Method)
06-17 22:25:48.366 12937 12937 W System.err:    at java.lang.Thread.start(Thread.java:730)
...

引發(fā)oom的相關(guān)日志

06-11 06:15:20.981 13253 31854 F Looper  : Could not create epoll instance: Too many open files

先解釋第二條日志的原因贫途,linux系統(tǒng)對(duì)于每個(gè)進(jìn)程能夠操作的文件句柄數(shù)量有一個(gè)上限,通常是1024待侵,如果超過了這個(gè)上限丢早,就會(huì)崩潰。我們平時(shí)的操作秧倾,比如文件怨酝,數(shù)據(jù)庫(kù)的讀寫,bitmap的加載那先,以至于socket的打開關(guān)閉农猬,so文件,dex文件的讀取售淡,都會(huì)直接影響這個(gè)句柄數(shù)量的增減斤葱。如下

package.name 15713     system  mem       REG             259,22    806688     934478 /data/data/    package.name/app_SGLib/libsgmainso-5.1.96.so
package.name 15713     system  mem   unknown                                         /dev/ashmem/dalvik-CompilerMetadata (deleted)
package.name 15713     system  mem       REG             259,20     10952       2308 /system/lib64/libscreencapture_jni.so
package.name 15713     system  mem   unknown                                         /dev/ashmem/dalvik-indirect ref table (deleted)
package.name 15713     system  mem       REG             259,22    221824    1310962 /data/app/    package.name-vfKvuMdB9mVCsGbB4t_mCg==/oat/arm64/base.odex
package.name 15713     system  mem       REG             259,22  11836592    1310965 /data/app    package.name-vfKvuMdB9mVCsGbB4t_mCg==/oat/arm64/base.vdex
package.name 15713     system  154u     0000               0,10       0t0       6783 anon_inode:[eventfd]
package.name 15713     system  155u     0000               0,10       0t0       6783 anon_inode:[eventpoll]
package.name 15713     system  156w      REG             259,22      3241     934842 /data/data/package.name/cache/image_manager_disk_cache/journal
package.name 15713     system   91u      REG             259,22     28672     942294 /data/data/com.hisense.smartimages/databases/report.db
package.name 15713     system   92u     sock                          0t0     192613 socket:[192613]
package.name 15713     system   93u     sock                          0t0     193069 socket:[193069]

解決思路

OOM的原因很簡(jiǎn)單慷垮,就是內(nèi)部類持有了外部類的引用未及時(shí)釋放,導(dǎo)致了每次都會(huì)新增內(nèi)存揍堕,但是深入的分析料身,就是文件句柄超出了數(shù)量限制。

既然是打開了太多的文件衩茸,則意味著某個(gè)地方的文件資源或者內(nèi)存未釋放芹血,導(dǎo)致了如上兩個(gè)問題,接下來就是問題排查楞慈,如果想要排查文件增減祟牲,可以通過如下命令

adb shell
ps -A //查看對(duì)應(yīng)應(yīng)用的pid
cd/proc/pid/fd //進(jìn)入指定目錄下
ls -l|wc -l //查看句柄數(shù)增減情況
lsof -p pid //查看詳細(xì)的句柄信息

需要一點(diǎn)一點(diǎn)的注釋代碼,排查產(chǎn)生句柄的代碼抖部,縮小范圍说贝,然后查看如何導(dǎo)致的內(nèi)存泄漏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慎颗,一起剝皮案震驚了整個(gè)濱河市乡恕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俯萎,老刑警劉巖傲宜,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異夫啊,居然都是意外死亡函卒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門撇眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來报嵌,“玉大人,你說我怎么就攤上這事熊榛∶” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵玄坦,是天一觀的道長(zhǎng)血筑。 經(jīng)常有香客問我,道長(zhǎng)煎楣,這世上最難降的妖魔是什么豺总? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮择懂,結(jié)果婚禮上喻喳,老公的妹妹穿的比我還像新娘。我一直安慰自己休蟹,他們只是感情好沸枯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布日矫。 她就那樣靜靜地躺著,像睡著了一般绑榴。 火紅的嫁衣襯著肌膚如雪哪轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天翔怎,我揣著相機(jī)與錄音窃诉,去河邊找鬼。 笑死赤套,一個(gè)胖子當(dāng)著我的面吹牛飘痛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播容握,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宣脉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了剔氏?” 一聲冷哼從身側(cè)響起塑猖,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谈跛,沒想到半個(gè)月后羊苟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡感憾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年蜡励,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阻桅。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凉倚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳍刷,到底是詐尸還是另有隱情占遥,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布输瓜,位于F島的核電站,受9級(jí)特大地震影響芬萍,放射性物質(zhì)發(fā)生泄漏尤揣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一柬祠、第九天 我趴在偏房一處隱蔽的房頂上張望北戏。 院中可真熱鬧,春花似錦漫蛔、人聲如沸嗜愈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蠕嫁。三九已至锨天,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剃毒,已是汗流浹背病袄。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赘阀,地道東北人益缠。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像基公,于是被迫代替她去往敵國(guó)和親幅慌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)轰豆,會(huì)觸發(fā)此異常胰伍。 O...
    我想起個(gè)好名字閱讀 5,308評(píng)論 0 9
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心秒咨,這里轉(zhuǎn)載一下喇辽,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,730評(píng)論 0 30
  • 摘要:?本文發(fā)現(xiàn)了一類OOM(OutOfMemoryError)雨席,這類OOM的特點(diǎn)是崩潰時(shí)java堆內(nèi)存和設(shè)備物理...
    陶菜菜閱讀 50,555評(píng)論 51 355
  • 今天沒有面試菩咨,要準(zhǔn)備下周五的頭條的面試。因?yàn)轭^條的JD里面有涉及到矩陣分解陡厘、GBDT抽米、LTR、Word2vec糙置、L...
    一路不向西閱讀 337評(píng)論 0 1
  • 幽雅人生閱讀 456評(píng)論 1 2