背景

公司app线上崩溃70%以上为OOM,创建线程时报出。原因有2,

第一,线程创建太多了,超出了系统限制

线程可以通过as cpu中 threads试图进行分析,也可以自己打印出来上报到日志系统,在每次崩溃之后,或者每隔多久收集一次。进行排序计数,找出数量最多,占着茅坑不拉屎的线程名字。

在as中安装JD-IntelliJ is a plug-in for the IntelliJ IDEA platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all. It is based on the famous tools JD-GUI.

他是一个基于著名的jd-gui开发的工具,可以方便的查看jar包,然后可以快速匹配jar包中字符串,很牛逼,不然一个个jar拷出来放到jd-gui查看很痛苦的

发现这个插件并不能达到我们在所有jar包中查找指定字符串的目标。

https://stackoverflow.com/questions/10331025/how-to-search-for-a-string-in-jar-files/10331145 这里面给出了一种方案

首先我们安装 cygwin,然后我发现zipgrep命令找不到,最后在谷歌中搜索zipgrep: command not found才知道zipgrep命令属于unzip这个package,然后重新点击cygwin的set.up.exe文件进行安装,在select pageage中选择full ,搜索unzip,勾选安装,重新打开命令行,命令成功运行

Todo : 这里可以待探索如何在as界面就可以看到线程由哪段代码创建?

Q:遇到cygwin乱码的问题

A:在Cygwin终端上右键-->Options…-->Text-->修改Locale 为 zh_CN,Character Set 为 GBK,问题便得到解决

使用zipgrep指令去寻找哪里创建的  宣告失败

最后通过Google搜索“pool-xx-thread”,找到是

https://stackoverflow.com/questions/47257571/how-to-hook-thread-creation-in-android

大多数正在运行的线程被命名为“ pool-xx-thread-1”,这是由生成的默认名称Executors.DefaultThreadFactory。似乎某些库代码创建了许多单线程池。

然后发现com.yunji.treabox.zkit.ExecutorUtil这个类用到了源码中的线程池

第二,内存使用不当,堆内存不足

内存使用不当,需要进行内存治理

内存治理的大方向无外乎

1.内存泄漏

后面会开专题

内存泄漏专题

主要利用as profile  ,操作可能会泄露的界面,退出该界面,手动多出发几次Gc,然后memory dump出.hprof文件,hprof-conv转译后使用MAT进行分析

再就是比较内存泄漏前后的内存快照,很容易就能找到泄漏点

2.内存抖动

cpu视图上可以看到哪个方法耗时

memery视图可以record  ,完了会排出哪些对象的数量大,占内存高,可以分析是哪个类导致

3.bitmap治理

记一次聚拢Android线程实操相关推荐

  1. Android应用优化之流畅度优化实操

    上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法.可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层.代码逻辑层.IO层来讲述各个优 ...

  2. qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...

    欢迎来到人人都可写代码,大家好,我是杨晓华,今天我们的课程内容是项目实操,以智者精选项目为例,编写一个Android app的入口关联菜单栏逻辑. 这是要实现的菜单栏组件展示效果,下面就是教大家如何制 ...

  3. 借贷记账法下的账户对应关系_会计实操借贷记账法记账规则——会计干货来了快记啊!...

    这是一篇干货,最近出的文章都是干货,希望对大家的会计实操夯实基础!今天给大家说一下借贷记账法中的记账规则! 记账规则,是指运用记账方法正确记录会计事项时必须遵守的规律.记账规则是记账的依据,也是对账的 ...

  4. 记一次 Git GitHub 实操

    记一次 Git & GitHub 实操 1.前言 之前写了一个名为 typora-tools 的小工具,主要实现了图片瘦身.标题编号.图片同步的功能,现在想将此项目上传至 GitHub 中,并 ...

  5. (Gradle实操)一步步使用Android Studio配置Gradle并运行Github开源源码

    翻了翻博客里的文章,发现小编在CSDN上写博客也有一年的时间了,到目前为止写了十来篇博客,最近些日子也在开始总结自己这一两年来的学习路线,也在开始反思一些问题.我稍稍做了一下总结.首先是产出太少,其次 ...

  6. QVM 实操记 - 18.12.28

    视频回放地址:https://i.iamlj.com/mp4/QVM-IMC-12.27-1080P.mp4 目录 目录 常规开发部署流程 准备工作 开发准备 网站部署 操作步骤 重装系统 LANP环 ...

  7. 实操教程|PyTorch AutoGrad C++层实现

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨xxy-zhihu@知乎 来源丨https://zhuanla ...

  8. tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...

    前言:近期推出的嵌入式AI系列直播公开课受到广大开发者的喜爱,并收到非常多的反馈信息,其中对如何在EAIDK上面部署Tengine开发AI应用感兴趣的开发者不在少数,我们将分2期以案例实操的形式详细介 ...

  9. 免费下载 |《数据分析从理念到实操》白皮书上线!先收藏!

    今日,神策数据重磅推出<数据分析从理念到实操>白皮书. 该白皮书结合神策数据服务的 1000 多家各行业标杆企业的实践经验,总结了如何构建数据基础.看数据.分析数据.落地数据应用.构建数据 ...

最新文章

  1. Sandbox 文件存放规则
  2. C++ 传指针还是引用?
  3. 英语口语练习系列-C24-杂技-问候语-乡愁
  4. dir612路由器虚拟服务器设置,dir612虚拟服务器设置
  5. vue store的值刷新就被覆盖解决方案
  6. Opencv之斑点(Blob)检测--SimpleBlobDetector_create
  7. android html模板下载地址,Android HTML模板
  8. 职称评审英语计算机不作要求,安徽:基层专业技术人员评职称外语计算机不作要求...
  9. 【渝粤教育】国家开放大学2018年秋季 1131t卫生经济学 参考试题
  10. 接触到的加密算法MD5、SHA1(转)
  11. iOS 8 自适应 Cell
  12. java自学路线图(超全超详细)
  13. 小球碰撞python代码_Java 实现小球碰撞GUI
  14. ol4服务器连接不稳定,红警Online频繁掉线怎么办 总是断开链接问题解答
  15. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
  16. Android Studio | 页面布局
  17. Rosalind Java| Counting Point Mutations
  18. EFR32 资源汇总
  19. 《A Transformer-based joint-encoding for Emotion Recognition andSentiment Analysis》论文翻译
  20. 使用H5 canvas画一个坦克

热门文章

  1. jmeter文件上传压测file upload-数据为空-Connection terminated parsing multipart data
  2. 员工怎样跟老板谈加薪 7个技巧让你成功加薪
  3. Android adb 命令大全
  4. 数据中心深度制冷联合解决方案登陆VMware云市场及VMware Explore 2022大会
  5. 在京东,我是怎么做项目管理的
  6. 企业管理推脱责任要不得.
  7. 北京5万份数字人民币红包来袭,系“冬奥试点”首次面向公众测试!
  8. 教你一招:低代码开发平台实现抗疫物资管理系统的搭建
  9. selenium中ByChained方法
  10. DtERP_erp企业资源计划系统