linux中使用arthas进行jvm内存分析

本文详细介绍了如何安装与配置Arthas工具,包括下载、本地安装步骤,以及启动服务、常用命令如dashboard、thread、jvm、memory和vmoption的使用方法,帮助开发者进行Java应用性能监控和问题排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 安装下载

首先在官方github地址选择合适的版本,下载后上传到对于服务器。
在这里插入图片描述
使用unzip arthas-bin.zip 解压文件。进入目录中,执行./install-local.sh进行安装。执行完成后提示succeed,即可使用。在这里插入图片描述

2. 启动

进入目录,执行java -jar arthas-boot.jar 启动服务,会列出当前服务的所有java程序,选择程序前的序号,进入程序的分析:
在这里插入图片描述

3. 常用命令

3.1 dashboard仪表板

默认为5s刷新一次。如果需要改变,使用dashboard -i 10000修改
在这里插入图片描述
线程部分ID的名称对应的线程类型:

  1. JIT 编译线程: 如 C1 CompilerThread0, C2 CompilerThread0
  2. GC 线程: 如GC Thread0, G1 Young RemSet Sampling
  3. 其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread

3.2 thread

查看当前线程信息,查看线程的堆栈
在这里插入图片描述
如需展示最忙的前 N 个线程并打印堆栈,使用 thread -n 3
在这里插入图片描述
thread -i 1000:统计最近 1000ms 内的线程 CPU 时间。
thread -n 3 -i 1000:列出 1000ms 内最忙的 3 个线程栈
thread -b:查看当前阻塞其他线程的线程

3.3 jvm

查看当前程序的jvm信息。
在这里插入图片描述
在这里插入图片描述

3.3 memory

查看 JVM 内存信息
在这里插入图片描述

3.4 vmoption

vmoption相关的信息以及修改vmoption信息
在这里插入图片描述
如果想查看某一项,直接使用vmoption 项目名即可,如:vmoption InitialHeapSize可查看初始的堆大小:
在这里插入图片描述
更新指定的 option( WRITEABLE 为 true 的可以修改),使用vmoption 项目加true进行设置,如:vmoption PrintGC true

<think>我们被要求使用ArthasLinux系统上分析Java方法的执行效率。根据引用[2],Arthas可以监测方法执行耗时,查看方法调用的出入参和异常等。以下步骤将指导完成此任务:###步骤1:下载并启动Arthas1.下载Arthas(如果尚未下载):```bashcurl-Ohttps://arthas.aliyun.com/arthas-boot.jar```2.启动Arthas之前,需要知道目标Java应用的进程ID(PID)。可以通过以下命令查找:```bashps-ef|grepjava```或者如果知道应用包含的特定关键字(如jar包名或应用名):```bashps-ef|grep[your_application_keyword]```找到对应的PID。3.启动Arthas并附加到目标进程:```bashjava-jararthas-boot.jar[PID]```如果只有一个Java进程,直接运行`java-jararthas-boot.jar`,然后选择列表中的进程号。###步骤2:使用Arthas监控方法性能启动Arthas后,进入交互式命令行。以下是常用命令:####(1)使用`watch`命令观察方法执行情况`watch`命令可以观察方法的入参、返回值、执行耗时等。例如,监控方法`com.example.service.UserService.getUser`的执行:```bashwatchcom.example.service.UserServicegetUser'{params,returnObj,throwExp}'-n5-b-e-x3```-`{params,returnObj,throwExp}`:分别表示入参、返回值和异常。-`-n5`:表示只执行5次。-`-b`:在方法开始之前观察(默认是方法结束后)。-`-e`:在方法抛出异常时观察。-`-x3`:指定对象展开层级为3。####(2)使用`trace`命令追踪方法调用链耗时`trace`命令可以追踪方法内部调用路径,并输出每个节点的耗时。例如:```bashtracecom.example.service.UserServicegetUser```此命令会显示`getUser`方法内部所有调用的方法及其耗时,帮助定位性能瓶颈点。####(3)使用`monitor`命令统计方法执行情况`monitor`命令可以按时间周期统计方法的执行情况,包括调用次数、成功次数、失败次数、平均耗时等。例如:```bashmonitor-c5com.example.service.UserServicegetUser```-`-c5`:每5秒统计一次。####(4)使用`profiler`命令进行火焰图分析(高级性能分析)如果需要更深入的性能分析,可以使用`profiler`命令生成火焰图:```bashprofilerstart#开始采样profilerstop#停止采样并生成火焰图(默认保存为html文件)```火焰图可以直观展示CPU时间花费在哪些方法上。###步骤3:分析结果根据上述命令的输出,分析:-方法执行时间是否过长?通过`watch`或`trace`查看具体耗时。-方法内部哪些子调用耗时最长?通过`trace`命令定位。-方法调用频率如何?通过`monitor`统计。-是否有异常抛出?通过`watch`命令的异常观察。###注意事项-确保Arthas版本与目标Java环境兼容。-生产环境谨慎使用,避免过多监控影响性能。-使用完成后,输入`quit`退出Arthas,但目标Java进程不受影响。通过以上步骤,即可在Linux使用Arthas高效分析Java方法性能。§§相关问题§§1.Arthas的`trace`命令和`watch`命令有什么区别?2.如何用Arthas监控一个方法在一天内的调用频率?3.Arthas火焰图如何解读?</think>### 在Linux使用Arthas分析Java方法性能的步骤 #### 1. **环境准备** - 下载Arthas: ```bash curl -O https://arthas.aliyun.com/arthas-boot.jar ``` #### 2. **定位目标Java进程** - 查找目标Java应用的PID: ```bash ps -ef | grep java # 或替换为应用关键词,如 grep your-app-name.jar ``` 输出示例: ``` user 12345 1 0 10:00 ? 00:00:05 java -jar your-app.jar ``` 记录PID(此处为`12345`)[^2]。 #### 3. **启动Arthas并附加到进程** ```bash java -jar arthas-boot.jar 12345 # 替换为实际PID ``` 启动成功后,会进入Arthas交互式命令行。 --- #### 4. **关键性能分析命令** ##### (1) **监控方法执行耗时 (`trace`)** ```bash trace com.example.YourService targetMethod # 替换为类名和方法名 ``` - **效果**:展示方法调用链中每个子方法的耗时,定位瓶颈点。 - **示例输出**: ``` `---[1.235ms] com.example.YourService:targetMethod() +---[0.812ms] com.example.Dao:queryData() `---[0.423ms] com.example.Util:process() ``` ##### (2) **实时观察方法参数/返回值 (`watch`)** ```bash watch com.example.YourService targetMethod "{params,returnObj}" -x 3 -n 5 ``` - `-x 3`:展开对象层级深度为3 - `-n 5`:仅捕获5次调用 - **输出**:显示入参、返回值及执行耗时[^2]。 ##### (3) **统计方法调用数据 (`monitor`)** ```bash monitor -c 10 com.example.YourService targetMethod # 每10秒统计一次 ``` - **输出**: ``` 调用次数: 120 | 平均耗时: 45ms | 失败率: 2% ``` ##### (4) **生成火焰图 (`profiler`)** ```bash profiler start # 开始采样 profiler stop --format html # 停止并生成HTML火焰图 ``` - **用途**:可视化CPU时间消耗,识别热点方法[^3]。 --- #### 5. **高级技巧** - **过滤耗时过长的调用**: ```bash trace com.example.* * '#cost > 50' # 仅显示耗时>50ms的方法 ``` - **监控异常方法**: ```bash watch com.example.YourService * throwExp -e -x 2 ``` - **查看JVM状态**: ```bash dashboard # 实时显示线程/内存/GC状态[^3] ``` --- #### 6. **退出Arthas** ```bash quit # 退出控制台(不影响目标进程) stop # 完全关闭Arthas ``` ### 注意事项 1. **权限要求**:需使用与Java进程相同的用户执行Arthas。 2. **性能影响**:`trace`/`watch`等命令会轻微增加开销,生产环境建议限流(如`-n 100`)。 3. **符号问题**:若方法含`$`符号(如Lambda),需用双引号包裹:`"lambda$methodName"`。 > **案例场景**:某接口平均响应500ms,通过`trace`发现数据库查询占400ms,进一步用`watch`检查查询参数,最终定位缺失索引问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值