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

nmr*_*nmr 5 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

但即使堆摘要失败:

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
Run Code Online (Sandbox Code Playgroud)

Dam*_*ash 17

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

kill -10 <pid>(更多)

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

adb shell am dumpheap <pid> <output-file-name>;(更多)

详细说明

要获得HPROF,您还需要使用hprof-conv更改它的格式


0ne*_*eel 8

最简单的方法:

adb shell am dumpheap your.package.name /sdcard/dumpheap.hprof
Run Code Online (Sandbox Code Playgroud)

困难的方法(不记得为什么我最初添加它):

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

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

之后拉取创建的文件,使用hprof-conv进行转换并在 Android Studio 中打开它。