如何以string方式查看heapdump中的byte数组
昨天,线上OOM,dump下来hprof文件,里面有两个大数组:
从表象上来看,和thrift导致的oom是一样的:
但是问题是,这种情况是怎么出现的呢?
找了好几种办法,没有头绪。
最后发现,把这个byte数组转成string就看到了thrift服务端的错误信息。
当时为了快速解决问题,是直接将前60个byte手抄到java代码中,然后转成string输出。
但是,不能一直都这么干,所以就看了下如何方便的将heapdump中的byte[]
输出为string。
查了半天,发现OQL没有这样的功能,但是VisualVM倒是可以间接的做这事:
- 选择
byte[]
对象,然后打开该对象的Preview面板 - 保存到文件
- 选择二进制文件格式
- 然后用cut命令输出前100个字符
如上图,这样就能看到报错信息了。再结合业务代码和日志,就能知道错误在哪儿了。
如何以string方式查看heapdump中的byte数组
https://robberphex.com/display-heapdump-byte-array-as-string/