V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moonrailgun
V2EX  ›  外包

请求 android 大佬帮助解决问题

  •  
  •   moonrailgun · 3 天前 · 1154 次点击

    最近我们项目出现了一些性能问题,在低配手机上会出现大量的 anr 和 oom 的问题(主要是 android 9 10)

    在堆栈上的显示大多是:

    invalid pthread_t 0x<sanitized> passed to pthread_getcpuclockid
    
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    
    backtrace:
      #00  pc 0x0000000000054070  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
      #01  pc 0x00000000000b9110  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_internal_find(long, char const*)+192)
      #02  pc 0x00000000000b9030  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_internal_gettid(long, char const*)+8)
      #03  pc 0x00000000000b8e24  /apex/com.android.runtime/lib64/bionic/libc.so (pthread_getcpuclockid+24)
      #04  pc 0x0000000000498c8c  /apex/com.android.art/lib64/libart.so (art::Thread::GetCpuMicroTime() const+40)
      #05  pc 0x000000000049898c  /apex/com.android.art/lib64/libart.so (art::GetSample(art::Thread*, void*) (.__uniq.52483287290921479263723184702455367361)+204)
      #06  pc 0x0000000000498564  /apex/com.android.art/lib64/libart.so (art::Trace::RunSamplingThread(void*)+320)
      #07  pc 0x00000000000b8b98  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208)
      #08  pc 0x0000000000055794  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
    

    java.lang.OutOfMemoryError
    
    Exception java.lang.OutOfMemoryError: std::bad_alloc
      at com.facebook.jni.NativeRunnable.run
      at android.os.Handler.handleCallback (Handler.java:761)
      at android.os.Handler.dispatchMessage (Handler.java:98)
      at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
      at android.os.Looper.loop (Looper.java:156)
      at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:233)
      at java.lang.Thread.run (Thread.java:776)
    
    

    如果能够有对这方面有经验的 android 大佬能支援一下帮助解决/定位问题的话,将万分感谢。

    (BTW: 我们的项目是用 RN 写的)

    有偿

    有意向的请联系微信: amFja3lqamNuOTk5Y2w=

    万分感谢

    12 条回复    2025-03-30 15:43:38 +08:00
    murmurkerman
        1
    murmurkerman  
       3 天前 via iPhone
    看下 anr oom 分布,普通内存 4gb 以上设备有没有出现。然后需要通过日志埋点还愿用户路径,尝试本地复现。单堆栈信息不足以推断出问题,需要加额外的日志和诊断数据比如定时获取系统和应用内存大小使用情况。先本地本地尝试复现,使用 profier 看 cpu 和内存变化,dump head 对比下是否有大对象泄漏。
    zdglf
        2
    zdglf  
       3 天前
    没内存了。应该是有泄漏,得排查
    moonrailgun
        3
    moonrailgun  
    OP
       3 天前
    @murmurkerman 1.5g ~ 2g 手机会出现。日志埋点就是在任何地方都会出现。很奇妙。

    内存控制在 400m 左右,基本没上过 500m

    头疼的原因是行业均值 0.4%,我们 2%。。。。。


    大佬可以私聊?
    3630cn2023
        4
    3630cn2023  
       3 天前 via Android
    leakcanary 本地测速看有没有内存泄漏,要覆盖全部代码
    debuggeeker
        5
    debuggeeker  
       2 天前
    @moonrailgun 2%离谱了
    debuggeeker
        6
    debuggeeker  
       2 天前
    买低配设备本地排查,先跑半个小时 monkey ,然后排查内存泄露情况
    murmurkerman
        7
    murmurkerman  
       2 天前 via iPhone
    @moonrailgun 2g 设备难,莫非是 Android5.1 之类十年前的设备。低端设备加上非原生的应用难,这类设备我也没有太好的优化方案。

    我之前负责的 flutter 应用在低内存设备 3gb 一下冷启动超过 5 秒,好在 flutter 不运行在 main 线程上没有 anr ,除非不用 flutter ,没救。

    建议从数据上说话,说服老板去掉这部分设备的支持。1. 活跃用户机型内存分布。2. 每个内存桶中出现 anr 和 oom 的比例。3. 每个内存桶营收数据。4. 如果是 gp 包,好像只影响这些设备上商店排名。

    我觉得直接把最低 sdk 提升到 24 的样子差不多了。
    murmurkerman
        8
    murmurkerman  
       2 天前 via iPhone
    看漏了。要用 react native 的工具去看。
    对 react native 涉猎不多,通过关键词搜索下 react native anr memory leak
    https://medium.com/@hbnguyen/detecting-and-handling-memory-leaks-in-react-native-apps-1453fea08d4d
    toby1902
        9
    toby1902  
       2 天前
    最近才看到得物的团队关于类似问题的分享,得物 Android Crash 治理实践

    https://mp.weixin.qq.com/s/DAofLOIRqAdCm_wiWZ6m4A
    bettesafford24
        10
    bettesafford24  
       2 天前
    接广告接的太多了
    murmurkerman
        11
    murmurkerman  
       2 天前 via iPhone
    @toby1902 我还从没见过 dns 崩溃的,神奇。最常见的还是 webview 的一些 bug 。
    pursuer
        12
    pursuer  
       1 天前
    试试 android:largeHeap="true"看看能不能抢救下,最好还是把很耗内存的代码处理一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:16 · PVG 06:16 · LAX 15:16 · JFK 18:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.