android内存泄漏分析的一种方式

2023-05-16

最近在处理项目的拷机问题,发现在测试24小时内,都是正常的,但是超过24小时后,重启一大片,让人抓狂。

分析了logcat打印,发现重启是因为系统服务已经被watchdog kill掉:

03-06 22:27:49.541   710  1064 W Watchdog: foreground thread stack trace:
03-06 22:27:49.542   710  1064 W Watchdog:     at android.os.MessageQueue.nativePollOnce(Native Method)
03-06 22:27:49.542   710  1064 W Watchdog:     at android.os.MessageQueue.next(MessageQueue.java:323)
03-06 22:27:49.542   710  1064 W Watchdog:     at android.os.Looper.loop(Looper.java:135)
03-06 22:27:49.542   710  1064 W Watchdog:     at android.os.HandlerThread.run(HandlerThread.java:61)
03-06 22:27:49.542   710  1064 W Watchdog:     at com.android.server.ServiceThread.run(ServiceThread.java:46)
03-06 22:27:49.542   710  1064 W Watchdog: *** GOODBYE!

这种情况,就要抓anr的traces.txt来分析:

"AlarmManager" prio=5 tid=26 Runnable
  | group="main" sCount=0 dsCount=0 obj=0x12ea03a0 self=0xeb2a6b00
  | sysTid=755 nice=0 cgrp=default sched=0/0 handle=0xde222930
  | state=R schedstat=( 98972491401001 276479663271 2197759 ) utm=9888269 stm=8980 core=1 HZ=100
  | stack=0xde120000-0xde122000 stackSize=1038KB
  | held mutexes= "mutator lock"(shared held)
  .....
  - locked <0x024448df> (a com.android.server.am.ActivityManagerService)


"main" prio=5 tid=1 Blocked
  | group="main" sCount=1 dsCount=0 obj=0x3426dfa0 self=0xf3934500
  | sysTid=710 nice=-2 cgrp=default sched=0/0 handle=0xf77344c0
  | state=S schedstat=( 7312752856937 488253068832 1803739 ) utm=659213 stm=72062 core=1 HZ=100
  | stack=0xff39d000-0xff39f000 stackSize=8MB
  | held mutexes=
  at com.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:17259)
  - waiting to lock <0x024448df> (a com.android.server.am.ActivityManagerService) held by thread 26



如上情况,main线程等待lock被tid=26的线程锁定的AcivitiyManagerService变量,一直无法获取到此对象,导致Watchdog超时,系统重启。

可是tid=26的线程状态是Runnable的,并没有等待其它锁,但为什么会造成持锁过久呢?

回到logcat的输出,没有发现明确的问题点。考虑到拷机要测试24小时后才会出现,有一种可能就是出现内在泄漏。这边采用eclipse的DDMS的插件进行分析。

下面是android sdk对这个工具的使用介绍:

Viewing heap usage for a process

DDMS allows you to view how much heap memory a process is using. This information is useful in tracking heap usage at a certain point of time during the execution of your application.

To view heap usage for a process:

  1. In the Devices tab, select the process that you want to see the heap information for.
  2. Click the Update Heap button to enable heap information for the process.
  3. In the Heap tab, click Cause GC to invoke garbage collection, which enables the collection of heap data. When the operation completes, you will see a group of object types and the memory that has been allocated for each type. You can click Cause GC again to refresh the data.
  4. Click on an object type in the list to see a bar graph that shows the number of objects allocated for a particular memory size in bytes.

下图是工具界面:



上面红框显示的#Objects是测试一段时间的数量,而开始前的数量如下:



可以看到#Objects出现了明显的增长。很可能出现了内存泄漏。因此,我们继续根据测试项运行的代码及系统调用,就可以比较容易定位到问题点。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android内存泄漏分析的一种方式 的相关文章

随机推荐

  • 【性能测试】利用IxChariot测试路由器吞吐量(wan to lan & lan to wan)

    写在前面 因项目原因 xff0c 本人对路由器吞吐量测试进行了学习探索 在学习过程中 xff0c 了解到IxChariot这一工具 xff0c 而在实践中 xff0c 也遇到一些问题 xff0c 花了较多时间去尝试和摸索 在此本人将这次实践
  • 通用文本标注工具 labelme

    欢迎大家前往腾讯云社区 xff0c 获取更多腾讯海量技术实践干货哦 作者 xff1a 理查德 导语 一个支持文本类目标注和关键词打分的通用标注工具 xff0c 为文本分类模型和关键词抽取任务提供训练和测试数据 by 慕福楠 amp 孙振龙
  • 干货|基于CPU的深度学习推理部署优化实践

    背景介绍 随着人工智能技术在爱奇艺视频业务线的广泛应用 xff0c 深度学习算法在云端的部署对计算资源 xff0c 尤其是 GPU 资源的需求也在飞速增长 如何提高深度学习应用部署效率 xff0c 降低云平台运行成本 xff0c 帮助算法及
  • Keycloak授权服务指南

    为什么80 的码农都做不了架构师 xff1f gt gt gt 本文译自Keycloak官方文档 xff0c 原文链接 对应版本为5 0 概述 Keycloak支持细粒度的授权策略 xff0c 并可以对这些策略进一步组合 xff0c 如 x
  • postgresql的substr()函数

    为什么80 的码农都做不了架构师 xff1f gt gt gt code select substr 39 1234 39 0 3 as re code 如果是pg xff1a 得到的结果是12 如果是oracle xff1a 得到的结果是
  • 【docker】查看docker镜像的版本号TAG,从远程仓库拉取自己想要版本的镜像

    要想查看镜像的版本好TAG 需要在docker hub查看 地址如下 xff1a https hub docker com r library 进入之后 xff0c 在页面左上角搜索框搜索 xff0c 例如搜索redis 搜索完成如下 xf
  • Windows下慎用内核隔离

    1 开启内核隔离后只能通过注册表关闭 2 开启内核隔离后 默认会启动hybrid v 这个东西和虚拟机是冲突的 这样就用不了虚拟机了 3 解决方法 关闭内核隔离后 再关闭已经开启的hybrid v 基本参考下面 可能要重复几次才能有效的关闭
  • EntLib 3.1学习笔记(4) : Logging Application Block

    zh http www microsoft com china MSDN library enterprisedevelopment softwaredev dnpag2logging mspx mfr 61 true en http ms
  • linux开机启动

    linux 有自己一套完整的启动体系 xff0c 抓住了 linux启动的脉络 xff0c linux的启动过程将不再神秘 阅读之前建议先看一下附图 本文中假设inittab中设置的init tree为 xff1a etc rc d rc0
  • 设置TextBox控件readOnly="True",后台无法取得客户端TextBox中值的解决方法

    在TextBox中设置属性 ContentEditable 61 34 false 34 即可 例 xff1a lt asp TextBox Id 61 34 txt DeptName 34 runat 61 34 server 34 Te
  • matlab练习程序(双边滤波)

    双边滤波模板主要有两个模板生成 xff0c 第一个是高斯模板 xff0c 第二个是以灰度级的差值作为函数系数生成的模板 然后这两个模板点乘就得到了最终的双边滤波模板 第一个模板是全局模板 xff0c 所以只需要生成一次 第二个模板需要对每个
  • hive:导出数据记录中null被替换为\n的解决方案

    在hive中 xff0c 一般情况下通过 1 use my hive db 2 set hive merge mapfiles 61 true 3 set hive merge mapredfiles 61 true 4 set hive
  • STP试验的综合应用

    实验环境 xff1a Catalyst 2950 24 S1 SwA S2 SwB S3 SwC S4 SwD 实验目的 xff1a 1 利用VTP协议实现VLAN配置的一致性 2 通过PVST的配置实现交换网络的负载分担 其次实现冗余备份
  • Ubuntu12.04LTS安装好后是空白桌面的解决步骤

    安装完毕启动后 xff0c 明显慢的要死 xff0c 登陆后竟然是一个空白的桌面环境 xff0c Ctrl 43 Alt 43 T 根本没有任何反应 唯一的反应就是右键能够创建文件和文档 同时打开的窗口没有最大化 xff0c 最小化及关闭按
  • could not execute menu item系统找不到指定的文件

    Wamp3 0 6 64bit xff0c 系统任务栏图标 xff0c 左键 xff0c Apache菜单 xff0c httpd conf xff0c 报错 could not execute menu item 系统找不到指定的文件 根
  • 这么好用的U盘数据恢复软件,推荐!

    U盘受到了用户不同程度的青睐 xff0c 可以将临时要用的数据输入到U盘中 但是U盘在使用过程中 xff0c 也会出现一些突发情况 xff0c 让用户措手不及 xff0c 其中最常见的就属数据丢失 数据丢失的原因包括多种 xff0c 误删除
  • node+微信小程序实现商城案例

    说明 xff1a 1 本人也是初次完整使用小程序 xff0c 如有BUG或者不足的地方请在Issues或者本文下方留言 xff0c 作者会尽快修改 xff0c 谢谢 xff01 2 本项目适合初学者或者准备自学小程序的伙伴 小程序功能 xf
  • SpringBoot使用fastjson的JsonField注解序列化Bigdecimal

    代码 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt project xmlns 61 34 http maven apache org POM 4 0 0 34 xmln
  • 网盘告急 亚信安全Safesync让企业级数据存储吃下“定心丸”

    近日 xff0c 两条重磅消息登上新闻头条 xff1a 一则是360云盘由于无法解决盗版侵权等问题 xff0c 将于2017年2月1日起关闭云盘 xff1b 另一则是百度遭到渔具店老板 撞库 xff0c 50万账号被盗后又遭转卖 xff0c
  • android内存泄漏分析的一种方式

    最近在处理项目的拷机问题 xff0c 发现在测试24小时内 xff0c 都是正常的 xff0c 但是超过24小时后 xff0c 重启一大片 xff0c 让人抓狂 分析了logcat打印 xff0c 发现重启是因为系统服务已经被watchdo