我希望能够从命令行触发Android堆转储。是否有命令?
具体来说,从命令行,而不是通过Montior或DDMS GUI
也许就像使用ddms或adb一样,例如: ddms -head-dump
或adb shell heapdump
? AFAICT监视器和ddms始终以GUI模式启动,而adb没有堆转储命令。
更新:我试过这个,看起来很有希望,但它不起作用:
adb jdwp
adb forward tcp:8000 jdwp:1234
(1234的替换输出1)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
答案 0 :(得分:17)
在Android pre 3.0中,您可以使用所谓的
kill -10 <pid>
(more)
在Android 3.0中添加了一个新的命令行工具:
adb shell am dumpheap <pid> <output-file-name>;
(more)
要获得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中打开它。