GithubHelp home page GithubHelp logo

mooner's Introduction

mooner

mooner 是一系列疑难native crash解决手段与黑科技实践的集合体,现包括以下功能:

功能1. 捕获 Android 基于“pthread_create” 产生的子线程中异常业务逻辑产生信号,导致的native crash

功能2. 突破Java虚拟机堆大小限制,实现LargeObjectSpace的内存隐藏,仅在OOM发生时生效,最小力度的影响

(demo演示:前一次是正常的OOM,后一次是开启mSponge方案后)

mooner.mp4

功能3. 用于排查pthread_mutex释放后使用的情况,当发生释放后使用时,会打印释放时的堆栈信息

功能1 捕获范围

1.由pthread_create 创建的线程中,执行的异常业务逻辑

2.捕获sigaction所支持的信号

3.监听信号时采用的是回溯处理,因此不像java 层try catch一样,而是将本次操作“清除”,如果业务强依赖这次操作,请做好开关降级处理

功能2 生效范围[目前作者用的是android11 手机,其他版本待todo适配,主要以学习为主,线上需要做好测试兼容]

隐藏LargeObjectSpace的内存使用(FreeListSpace),提高堆内存的上限,提升大小为当前(FreeListSpace的使用内存大小),且只在OOM时生效,挽救OOM

功能3 pthread_mutex 释放跟踪

当出现锁释放后使用时,给出释放时的堆栈信息,用于异常排查

详细介绍

功能1: https://juejin.cn/post/7178341941480783931/

功能2: https://juejin.cn/post/7218379300505059365

使用说明

已发布到mavencenter仓库 gradle 导入 已包含全部功能

implementation 'io.github.TestPlanB:mooner:2.0.2'

功能1使用

使用方式非常简单:

参数1:需要进行兜底的so库名,全名称

参数2:需要捕获的信号,比如11 SIGSEGV

参数3:回调,当异常捕获后就会回调该参数

Mooner.initMooner("libmooner.so",11){
                Log.e("mooner","catch exception")
            }

功能2使用

合适的时候调用以下即可实现堆内存限制突破(只是初始化),会在OOM的时候生效

关于demo:demo模拟了一下内存申请,分别是大对象申请与多个小对象申请,验证效果请先点击几下小对象申请,然后再点大对象申请,因为如果OOM发生时,多次申请小对象,也就会造成多次gc(仅实验条件下)

 Mooner.initMSponge()

功能3使用

参数1 是需要监控的so名称,此时框架内会hook所有pthread_mutex相关的调用,比如:

Mooner.startMutexMonitor("libmooner.so")

项目层级介绍

  • app下是使用例子
  • mooner-core 是mooner的核心实现

环境准备

建议直接用最新的稳定版本Android Studio打开工程。目前项目已适配Android Studio Arctic Fox | 2022.3.1

mooner's People

Contributors

testplanb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mooner's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.