Android 资源溢出崩溃轻松解

本文介绍了Android应用中常见的资源溢出问题,包括内存溢出(OOM)和FD(文件描述符)溢出。通过分析崩溃日志和使用性能监控工具APMPlus,可以定位并解决这些问题。当遇到类似崩溃时,应检查内存占用情况和打开的文件数量,以避免系统资源耗尽导致的崩溃。
摘要由CSDN通过智能技术生成

在这里插入图片描述
作者:字节跳动终端技术—李权飞

资源溢出是什么?

毫无疑问,应用的运行需要占用系统的资源。其中最为人所熟知的资源是内存,内存溢出便是耳熟能详的OOM。

常见的简单OOM一般可以通过堆栈来解决,如Java OOM,一部分可以直接从堆栈中看到哪里使用了多大内存导致了内存溢出,复杂一些的Java OOM,则可以使用其他分析工具来进行处理。但如果堆栈里看不出来呢?或者它不是Java崩溃呢?

java.lang.OutOfMemoryError: Failed to allocate a 3237132 byte allocation with 1612328 free bytes and 1574KB until OOM

比如下面这样的Native崩溃,堆栈全是系统堆栈,不花时间去研究就很难确定此崩溃的原因(事实上这个崩溃也是一个OOM)。尤其是,我们并不能说这是系统代码的问题。

接下来本文将会介绍,对于这类崩溃如何进行识别、以及解决。

image.png

内存溢出(俗称OOM)

如下case:

Signal 6(SIGABRT), Code -1(SI_QUEUE)
#00 pc 000604de  /apex/com.android.runtime/lib/bionic/libc.so (abort+165)
#01 pc 0003606d  /system/lib/libc++.so (abort_message+88)
#02 pc 000361f1  /system/lib/libc++.so (_ZL28demangling_terminate_handlerv+160)
#03 pc 00045e4b  /system/lib/libc++.so (_ZSt11__terminatePFvvE+2)
#04 pc 00045653  /system/lib/libc++.so (_ZN10__cxxabiv1L12failed_throwEPNS_15__cxa_exceptionE+12)
#05 pc 000455b5  /system/lib/libc++.so (__cxa_throw+72)
#06 pc 00047c6d  /system/lib/libc++.so (_Znwj+52)
#07 pc 0000132b  /system/lib/libbinderthreadstate.so (_ZNSt3__15dequeIN7android18IPCThreadStateBase9CallStateENS_9allocatorIS3_EEE19__add_back_capacityEv+186)
#08 pc 0000120b  /system/lib/libbinderthreadstate.so (_ZNSt3__15dequeIN7android18IPCThreadStateBase9CallStateENS_9allocatorIS3_EEE12emplace_backIJRS3_EEES8_DpOT_+52)
#09 pc 0000115f  /system/lib/libbind
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值