KwaiAppTeam / KOOM

KOOM is an OOM killer on mobile platform by Kwai.
Other
3.19k stars 424 forks source link

2.0.0版本 使用koom-fill-crop 恢复strip的hprof文件失败 #170

Open dianchewolf opened 2 years ago

dianchewolf commented 2 years ago

demo工程 最新的master代码 机型 小米10s 系统 Android 11 miui 12.5

使得demo工程 test hprof strip 导出 test.hprof, 使用koom-fill-crop 恢复失败

java.lang.IndexOutOfBoundsException at java.nio.Buffer.checkBounds(Unknown Source) at java.nio.DirectByteBuffer.get(Unknown Source) at com.android.tools.perflib.heap.io.MemoryMappedFileBuffer.setPosition(MemoryMappedFileBuffer.java:315) at com.android.tools.perflib.heap.HprofParser.skipFully(HprofParser.java:771) at com.android.tools.perflib.heap.HprofParser.parse(HprofParser.java:267) at com.android.tools.perflib.heap.Main.main(Main.java:36) java.lang.IllegalArgumentException: Class not found: java.lang.String at com.android.tools.perflib.heap.Queries.instancesOf(Queries.java:156) at com.android.tools.perflib.heap.Main.testFindInstancesOf(Main.java:86) at com.android.tools.perflib.heap.Main.main(Main.java:40)

导出的文件 https://github.com/dianchewolf/filetemp/blob/main/test.hprof

AndroidInternal commented 2 years ago

是必现吗,有没有更多demo app报错日志?

t894924815 commented 2 years ago

同样的问题,我开始以为是我 jdk 版本问题,后来发现把 hprof 跟 koom-fill-crop.jar 换成全路径就 ok了,很迷

AndroidInternal commented 2 years ago

同样的问题,我开始以为是我 jdk 版本问题,后来发现把 hprof 跟 koom-fill-crop.jar 换成全路径就 ok了,很迷

他这个问题和路径没有关系,是hprof存储内容非法了,你有必现复现路径吗?

t894924815 commented 2 years ago

同样的问题,我开始以为是我 jdk 版本问题,后来发现把 hprof 跟 koom-fill-crop.jar 换成全路径就 ok了,很迷

他这个问题和路径没有关系,是hprof存储内容非法了,你有必现复现路径吗?

搞错了,我那个导出的 hprof 没成功导出,文件本身没内容

mrqinshou commented 1 year ago

我有跟你类似的情况,恢复 hprof 文件报错,我试了恢复用命令 adb shell "run-as com.kwai.koom.demo cat 'files/test.hprof'" > ~/temp/test.hprof 导出的文件和用 AS save as 导出的文件都报错,但是这两种方式导出的文件大小居然不一样,报的错误也不一样。 恢复命令导出的文件报错如下: java.nio.BufferUnderflowException at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:270) at com.android.tools.perflib.heap.io.MemoryMappedFileBuffer.setPosition(MemoryMappedFileBuffer.java:315) at com.android.tools.perflib.heap.HprofParser.skipFully(HprofParser.java:771) at com.android.tools.perflib.heap.HprofParser.parse(HprofParser.java:267) at com.android.tools.perflib.heap.Main.main(Main.java:36) java.lang.IllegalArgumentException: Class not found: java.lang.String at com.android.tools.perflib.heap.Queries.instancesOf(Queries.java:156) at com.android.tools.perflib.heap.Main.testFindInstancesOf(Main.java:86) at com.android.tools.perflib.heap.Main.main(Main.java:40)

恢复 save as 导出的文件报错如下: java.lang.IllegalArgumentException: loadHeapDump loop with unknown tag 66 with 32852422 bytes possibly remaining at com.android.tools.perflib.heap.HprofParser.loadHeapDump(HprofParser.java:548) at com.android.tools.perflib.heap.HprofParser.parse(HprofParser.java:254) at com.android.tools.perflib.heap.Main.main(Main.java:36) java.lang.IllegalArgumentException: Class not found: java.lang.String at com.android.tools.perflib.heap.Queries.instancesOf(Queries.java:156) at com.android.tools.perflib.heap.Main.testFindInstancesOf(Main.java:86) at com.android.tools.perflib.heap.Main.main(Main.java:40)

zymagic commented 1 year ago

hprof文件里出现了一个异常的字符串block

ljzRober commented 11 months ago

有大佬解决了这个问题吗?