Arthas - 在线分析代码性能 - Java诊断利器 监控软件 规划调试


https://github.com/alibaba/arthas

https://arthas.aliyun.com/doc/


curl -O https://arthas.aliyun.com/arthas-boot.jar

java -jar arthas-boot.jar

-帮助信息:

java -jar arthas-boot.jar -h

-使用 aliyun 的镜像:

java -jar arthas-boot.jar --repo-mirror aliyun --use-http


---Docker

-在Docker里使用 JDK 的方式

-公开的 JDK 镜像
FROM openjdk:8-jdk
FROM openjdk:8-jdk-alpine
# Install OpenJDK-8
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk && \
    apt-get install -y ant && \
    apt-get clean;
# Fix certificate issues
RUN apt-get update && \
    apt-get install ca-certificates-java && \
    apt-get clean && \
    update-ca-certificates -f;
# Setup JAVA_HOME -- useful for docker commandline
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME
RUN yum install -y \
   java-1.8.0-openjdk \
   java-1.8.0-openjdk-devel
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/
RUN export JAVA_HOME
-把 Arthas 安装到基础镜像里
-可以很简单把 Arthas 安装到你的 Docker 镜像里。
FROM openjdk:8-jdk-alpine
# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

-启动math-game

docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"

-启动arthas-boot来进行诊断

docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
* [1]: 9 jar
[INFO] arthas home: /opt/arthas
[INFO] Try to attach process 9
[INFO] Attach process 9 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
/  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
wiki: https://arthas.aliyun.com/doc
version: 3.0.5
pid: 9
time: 2018-12-18 11:30:36

-诊断 Docker 里的 Java 进程

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

-诊断 k8s 里容器里的 Java 进程

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

---Arthas Properties

-arthas.properties文件在 arthas 的目录下。
-如果是自动下载的 arthas,则目录在~/.arthas/lib/3.x.x/arthas/下面
-如果是下载的完整包,在 arthas 解压目录下
-如果配置 arthas.telnetPort为 -1 ,则不 listen telnet 端口。arthas.httpPort类似。
-如果配置 arthas.telnetPort为 0 ,则随机 telnet 端口,在~/logs/arthas/arthas.log里可以找到具体端口日志。arthas.httpPort类似。
-如果是防止一个机器上启动多个 arthas 端口冲突。可以配置为随机端口,或者配置为 -1,并且通过 tunnel server 来使用 arthas。
#arthas.config.overrideAll=true
arthas.telnetPort=3658
arthas.httpPort=8563
arthas.ip=127.0.0.1
# seconds
arthas.sessionTimeout=1800
#arthas.appName=demoapp
#arthas.tunnelServer=ws://127.0.0.1:7777/ws
#arthas.agentId=mmmmmmyiddddd

---以 Java Agent 的方式启动

默认的配置项在解压目录里的arthas.properties文件里。

java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar

---当前系统的实时数据面板,按 ctrl+c 退出

dashboard

---一目了然的了解系统的状态,哪些线程比较占cpu?他们到底在做什么?

thread -n 3

---观察方法执行的时候哪个子调用比较慢

Trace


---通过浏览器连接 arthas

-Arthas 目前支持 Web Console,用户在 attach 成功之后,可以直接访问:

http://127.0.0.1:8563/

---想从远程连接,则可以使用 --target-ip参数指定 listen 的 IP

http://127.0.0.1:8563/

---支持向上回滚的行数是 1000

http://127.0.0.1:8563/?scrollback=3000




---前言

作为一名资深后端开发,你在生产环境一定会碰到这样的场景:

产品:线上这个页面加载比较慢,前端同学说是接口响应比较慢,你能帮忙优化下吗?

后端:不应该啊,测试环境很丝滑啊。

产品:要不你自己操作试下?

经过实操,线上环境果然一直转圈圈,然后你转眼看上那座山,看着那些拉几屏栈帧还没结束的函数,各种方法调用,嵌套,然后你那充满智慧的小脑袋瓜立马想到从日志上看出端倪,但是那少的可怜的日志反手给了你泼了一盆冷水。

方法调用链路繁杂,调用耗时在日志中缺失,目前能想到的最好的办法就是拉分支→加上耗时→上线→找到耗时最久的代码→拉分支→优化代码→上线。相信这是很多同学的处理方式,这个过程虽然思路清晰,但是很繁琐。

那如果有这样一个工具,只需简单的命令,就能在线给你列出所有调用链路耗时,那爽不爽,丝滑不丝滑,那我们就一起来了解下这个颠覆问题排查方式的工具,它就是Arthas。

---Arthas能做什么

无需修改代码在线监测代码耗时。

无需修改代码在线抓取方法入参出参。

在线反编译字节码文件。

生成火焰图查找引起FULLGC的大对象。

以及其他你能想到或想不到的功能,快来一起发掘吧……



签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回