- 我已经在 issues 里搜索,没有重复的issue。
环境信息
arthas-boot.jar
或者as.sh
的版本: xxx- Arthas 版本: xxx
- 操作系统版本: xxx
- 目标进程的JVM版本: xxx
- 执行
arthas-boot
的版本: xxx
重现问题的步骤
- xxx
- xxx
- xxx
期望的结果
正常使用的arthas排查问题的时候我们很少会去查询每个对象的内存,如果可以获取到当前占用内存最多的对象(类似于jmap的功能那个),排查问题的难度就会大大减少。然后根据内存使用排行榜,再去做具体的排查。
实际运行的结果
实际运行结果,最好有详细的日志,异常栈。尽量贴文本。
把异常信息贴到这里
9条答案
按热度按时间qvsjd97n1#
这个可以实现,不过十分消耗资源,相当于调用vmtool.getAllInstance(Object.class)获取所有示例,然后分别调用vmtool.getInstanceSize 发自我的iPhone…
------------------ 原始邮件 ------------------ 发件人: kobe-yang***@***.***> 发送时间: 2021年7月8日 17:30 收件人: alibaba/arthas***@***.***> 抄送: Subscribed***@***.***> 主题: 回复:[alibaba/arthas] VMTools 添加内存使用排行榜公布功能 (#1854) 我已经在 issues 里搜索,没有重复的issue。 环境信息 arthas-boot.jar 或者 as.sh 的版本: xxx Arthas 版本: xxx 操作系统版本: xxx 目标进程的JVM版本: xxx 执行arthas-boot的版本: xxx 重现问题的步骤 xxx xxx xxx 期望的结果 正常使用的arthas排查问题的时候我们很少会去查询每个对象的内存,如果可以获取到当前占用内存最多的对象(类似于jmap的功能那个),排查问题的难度就会大大减少。然后根据内存使用排行榜,再去做具体的排查。 实际运行的结果 实际运行结果,最好有详细的日志,异常栈。尽量贴文本。 把异常信息贴到这里 — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
rslzwgfq2#
即使把实现逻辑放到jni方法中,仍然十分消耗性能。 发自我的iPhone…
------------------ 原始邮件 ------------------ 发件人: kobe-yang***@***.***> 发送时间: 2021年7月8日 17:30 收件人: alibaba/arthas***@***.***> 抄送: Subscribed***@***.***> 主题: 回复:[alibaba/arthas] VMTools 添加内存使用排行榜公布功能 (#1854) 我已经在 issues 里搜索,没有重复的issue。 环境信息 arthas-boot.jar 或者 as.sh 的版本: xxx Arthas 版本: xxx 操作系统版本: xxx 目标进程的JVM版本: xxx 执行arthas-boot的版本: xxx 重现问题的步骤 xxx xxx xxx 期望的结果 正常使用的arthas排查问题的时候我们很少会去查询每个对象的内存,如果可以获取到当前占用内存最多的对象(类似于jmap的功能那个),排查问题的难度就会大大减少。然后根据内存使用排行榜,再去做具体的排查。 实际运行的结果 实际运行结果,最好有详细的日志,异常栈。尽量贴文本。 把异常信息贴到这里 — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
q3qa4bjr3#
先用jmap定位占用内存最多的class,再用class定位占用内存最多的对象,如何? 发自我的iPhone…
------------------ 原始邮件 ------------------ 发件人: kobe-yang***@***.***> 发送时间: 2021年7月8日 17:30 收件人: alibaba/arthas***@***.***> 抄送: Subscribed***@***.***> 主题: 回复:[alibaba/arthas] VMTools 添加内存使用排行榜公布功能 (#1854) 我已经在 issues 里搜索,没有重复的issue。 环境信息 arthas-boot.jar 或者 as.sh 的版本: xxx Arthas 版本: xxx 操作系统版本: xxx 目标进程的JVM版本: xxx 执行arthas-boot的版本: xxx 重现问题的步骤 xxx xxx xxx 期望的结果 正常使用的arthas排查问题的时候我们很少会去查询每个对象的内存,如果可以获取到当前占用内存最多的对象(类似于jmap的功能那个),排查问题的难度就会大大减少。然后根据内存使用排行榜,再去做具体的排查。 实际运行的结果 实际运行结果,最好有详细的日志,异常栈。尽量贴文本。 把异常信息贴到这里 — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
xeufq47z4#
您说的这个方法我也考虑过了。就是觉得太占资源了 。 就在思考能否将jmap histo 的功能添加到 Vmtool中。另外用jmap去获取内存大小排行的时候,是不是也是很耗内存的。
bq8i3lrv5#
但是查了一天资料还没思路怎么讲jmap的 jmap histo 的功能集成到arthas 中。 也还没什么思路。。。
0h4hbjxa6#
在JVMTI里可以统计的,不过还没空搞,意义可能也不是很大。 参考: https://blog.51cto.com/aliapp/1325116
7vux5j2d7#
定位内存泄漏问题的时候,先通过jmap定位class,再通过class定位大对象,你觉得呢?@hengyunabc
vjhs03f78#
这样整定位出来的不准确,还是相当于要拿到所有示例及大小,然后计算排序。另外,jmp histo也会产生stop-the-world。
i86rm4rw9#
jmap histo
在实战中定位大内存大对象很难用,而且会 STW,线上没法用。实际上排查内存用量大的方向,不只是定位对象大小一条:
Arthas Profiler
arthas profiler 命令。
profiler start --event alloc
可追踪到代码级别的内存申请量,大部分情况下可以一次性定位到根因。获取线程级别的内存用量
往往线程级别的用量也会看出很多问题,比如 Tomcat 线程用得少,RocketMQ 用的多,往消费 RocketMQ 的代码瞅瞅基本能知道个大概了。
线程级别内存申请:
GC 飙高的时候通过这个一眼就能看出大部分是消费 appPush 的线程在大量申请内存。
参考代码: