MST

星途 面试题库

面试题:Java性能调优中Arthas工具的高级应用

假设一个生产环境中的Java应用出现响应缓慢问题,在无法重启应用的情况下,如何利用Arthas工具动态排查是哪些方法调用链导致了性能瓶颈,并给出具体的操作步骤和可能涉及的关键命令?
46.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 启动Arthas
    • 下载Arthas对应版本,可从官方仓库获取。
    • 执行java -jar arthas-boot.jar,它会自动检测当前运行的Java进程,选择目标应用对应的进程编号来启动Arthas连接到目标Java应用。
  2. 使用trace命令
    • 命令格式trace <类名> <方法名>。例如,如果要排查com.example.demo.service.UserService类中的getUserInfo方法的调用链性能情况,命令为trace com.example.demo.service.UserService getUserInfo
    • 参数说明
      • --skipJDKMethod false:默认情况下,trace会跳过JDK方法,若想追踪JDK方法,设置此参数为false
      • -n 10:表示只追踪10次调用,可根据实际情况调整。
  3. 使用watch命令辅助
    • 命令格式watch <类名> <方法名> "{params,returnObj}" -x 2。例如watch com.example.demo.service.UserService getUserInfo "{params,returnObj}" -x 2
    • 参数说明
      • "{params,returnObj}":表示观察方法的入参params和返回值returnObj
      • -x 2:表示对观察的对象展开2层属性,可按需调整展开层级。
  4. 使用stack命令
    • 命令格式stack <类名> <方法名>。比如stack com.example.demo.service.UserService getUserInfo
    • 作用:当trace命令输出结果较多难以分析时,stack命令可以打印出当前方法被调用的栈信息,方便定位方法调用源头。

通过以上tracewatchstack等Arthas关键命令的使用,可以动态排查出Java应用中导致性能瓶颈的方法调用链。