专栏首页YP小站Java分析神器 - Arthas

Java分析神器 - Arthas

Arthas 简介

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

Arthas 支持 JDK 6+,支持 LinuxMacWindows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

Arthas 能帮你解决的问题

  • 1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 2、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 3、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 4、线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 5、是否有一个全局视角来查看系统的运行状况?
  • 6、有什么办法可以监控到JVM的实时运行状态?
  • 7、怎么快速定位应用的热点,生成火焰图?

Arthas 安装

使用 as.sh

Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可:

$ curl -L https://alibaba.github.io/arthas/install.sh | sh

上述命令会下载启动脚本文件 as.sh当前目录,你可以放在任何地方或将其加入到 $PATH 中。

直接在shell下面执行 ./as.sh ,就会进入交互界面。

也可以执行 ./as.sh -h 来获取更多参数信息。

手动安装

通过 rpm/deb 来安装

在releases页面下载rpm/deb包:https://github.com/alibaba/arthas/releases

# 安装deb
$ sudo dpkg -i arthas*.deb

# 安装rpm
$ sudo rpm -i arthas*.rpm

# deb/rpm安装的用法,在安装后,可以直接执行
$ as.sh

启动 Arthas

在命令行下面执行(使用和目标进程一致的用户启动,否则可能attach失败):

$ curl -O https://alibaba.github.io/arthas/arthas-boot.jar
$ java -jar arthas-boot.jar
  • 执行该程序的用户需要和目标进程具有相同的权限。比如以admin用户来执行:sudo su admin && java -jar arthas-boot.jarsudo -u admin -EH java -jar arthas-boot.jar
  • 如果attach不上目标进程,可以查看 ~/logs/arthas/ 目录下的日志。
  • 如果下载速度比较慢,可以使用aliyun的镜像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http
  • java -jar arthas-boot.jar -h 打印更多参数信息。

选择应用java进程:

$ $ java -jar arthas-boot.jar

* [1]: 35542
  [2]: 71560 arthas-demo.jar

Demo进程是第2个,则输入2,再输入 回车/enter。Arthas会attach到目标进程上,并输出日志:

[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'

wiki: https://alibaba.github.io/arthas
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24

$

Dashboard

# 在上面基础环境中执行 dashboard 命令
$ dashboard

在线演示

  • 基础教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-basics
  • 进阶教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced

基于 Docker 诊断 Java 进程

诊断 Docker 里的 Java 进程

$ docker exec -it  ${containerId} /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"

诊断 k8s 里容器里的 Java 进程

$ kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"

把 Arthas 打包到基础镜像里

FROM openjdk:8-jdk-alpine

# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

如果想指定版本,可以查看具体的tags:https://hub.docker.com/r/hengyunabc/arthas/tags

总结

Arthas 是一个强大的 Java 诊断工具,可以分析 Java 代码bug带来的资源消耗等问题。

Arthas 详细使用方法,公众号后台回复 Arthas 获取Arthas详细参数思维导图。

参考链接

  • Arthas 快速入门 https://alibaba.github.io/arthas/quick-start.html
  • https://github.com/alibaba/arthas/blob/master/README_CN.md

本文分享自微信公众号 - YP小站(ypxiaozhan),作者:YP小站

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 无法查看 pods 日志问题

    最近使用二进制部署完 Kubernetes 1.18.2 版本,运行命令 kubectl logs -n kube-system calico-node-mbj...

    YP小站
  • 聊聊 resolv.conf 中 search 和 ndots 配置

    Kubernetes 集群中,域名解析离不开 DNS 服务,在 Kubernetes v1.10 以前集群使用 kube-dns dns服务,后来在 Kuber...

    YP小站
  • 专业API压测工具siege 下载以及使用方法

    在日常生活中、我们经常要对我们的网站API 进行测试,随着数据的增多。我们要时刻知道,我们网站API的抗压性是否还支撑,我们的API是否还是健壮的。

    YP小站
  • Java线上问题排查神器Arthas快速上手与原理浅谈

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    后端技术漫谈
  • WSREP has not yet prepared node for application use

    最近PXC 5.7出现脑裂,前端Navicate连接到MySQL时,提示WSREP has not yet prepared node for applicat...

    Leshami
  • 文本特征提取Bag of words(词袋)tfidfcsr_matrix

    其实我比较疑惑的地方是toarray()这个方法,count_data 为什么可以通过这个方法可以转化成那个样子,后来查了一下资料: 下面是一个关于csr_m...

    致Great
  • Java开发环境系列:版本控制Git&GitHub实用教程

    网上的教程,大多数都是通过命令来实现远程仓库的克隆、修改、提交等操作,但是真正在公司里,大多数时候都是将Git集成在IDE(如Idea、Eclipse),或使用...

    架构师小跟班
  • 用户注册登录系统 V2.0

    skylark
  • OOAD-设计模式(二)之GRASP模式与GOF设计模式概述

    一、GRASP模式(通用责任分配软件模式)概述 1.1、理解责任   1)什么是责任     责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为...

    用户1195962
  • Perl开发的学习-3

    计算机作为一种计算工具,其优势在于执行重复任务和根据条件进行大量判断(因此循环语句,条件语句及顺序执行语句是计算机控制结构中基本语句,而与人类语言中句法完全不同...

    py3study

扫码关注云+社区

领取腾讯云代金券