是否可以从命令行触发Android堆转储?

时间:2014-09-11 19:19:12

标签: android heap-dump

我希望能够从命令行触发Android堆转储。是否有命令?

具体来说,从命令行,而不是通过Montior或DDMS GUI

也许就像使用ddms或adb一样,例如: ddms -head-dumpadb shell heapdump? AFAICT监视器和ddms始终以GUI模式启动,而adb没有堆转储命令。

更新:我试过这个,看起来很有希望,但它不起作用:

  1. adb jdwp
  2. adb forward tcp:8000 jdwp:1234(1234的替换输出1)
  3. jmap -dump:format=b,file=heapdump.hprof localhost:8000
  4. 但即使堆摘要失败:

    jmap -heap localhost:8000
    Attaching to remote server localhost:8000, please wait...
    Error attaching to remote server: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
            java.net.SocketTimeoutException: Read timed out
    

2 个答案:

答案 0 :(得分:17)

在Android pre 3.0中,您可以使用所谓的

kill -10 <pid>more

在Android 3.0中添加了一个新的命令行工具:

adb shell am dumpheap <pid> <output-file-name>;more

Detailed description

要获得HPROF,您还需要使用hprof-conv

更改其格式

答案 1 :(得分:3)

简单方法:

adb shell am dumpheap your.package.name /sdcard/dumpheap.hprof

艰难的道路:

adb shell am dumpheap $(ps | grep your.package.name | awk '{print $2}') /sdcard/dumpheap.hprof

如果您的设备没有awk,请尝试使用busybox awk

然后拉出创建的文件,将其转换为hprof-conv并在Android Studio中打开它。