JVM原理之调优工具

10 调优工具

前面我们了解到了许多jvm命令以及参数,但是用命令还是不太方便,有没有可视化的工具呢?答案是肯定的

10.1 jConsole

jConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行状态,监控堆信息,永久区使用情况,类加载情况等。

命令行输入: jconsole

10.2 jvisualvm

10.2.1 监控本地java进程的CPU,类,线程等
10.2.2 监控远程java进程

如监控tomcat,部署在阿里云上tomcat

  1. 在visualvm中选中“远程”,右击“添加”

  2. 主机名上写服务器ip地址,然后点击 “确定”

  3. 右击该主机“39.100.XX.XX” ,添加“JMX”[也就是通过JMX技术具体监控远端服务器哪个java进程]

  4. 要想让服务器上的tomcat被连接,需要改一下bin/catalina.sh这个文件

    注意下面的8998 不要和 服务器上其他的端口冲突

    JAVA_OPTS="$JAVA_OPTS-Dcom.sun.management.jmxremote-Djava.rmi.server.hostname=31.100.39.63-Dcom.sun.management.jmxremote.port=8998 -Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=true-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password"
    
  5. 在…/conf文件中添加两个文件jmxremote.accessjmxremote.password ,并授予权限:chmod 600 *jmxremot*

    jmxremote.access文件配置: 用户权限

guest readonly
manager readwrite

jmxremote.password配置文件: 配置 管理员 与 普通用户 用户名密码

guest guest
manager manager
  1. 将连接服务器地址改为公网ip地址

    #查看输出情况
    hostname-i
    # 输出
    172.26.225.243  172.17.0.3
    # 更改 hosts文件:
    vim /etc/hosts
    # 修改
    172.26.225.243 公网ip地址
    
  2. 设置上述端口对应的阿里云安全策略和防火墙策略

  3. 启动tomcat,来到bin目录 ,启动 tomcat ./startup.sh

  4. 查看tomcat启动日志以及端口监听

    tail -f ../logs/catalina.out 
    lsof -i tcp:8080
    
  5. 查看8998监听情况,可以发现多开了几个端口

    #查看端口,得到PID
    lsof -i:8998
    
    netstat-antup | grep PID
    
  6. 在刚才的JMX中输入8998端口,并且输入用户名和密码则登录成功

端口:8998
用户名:manager 
密码:manager

10.3 Arthas

github地址::https://github.com/alibaba/arthas

以下摘录自:https://github.com/alibaba/arthas/blob/master/README_CN.md

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

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

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

下载arthas-boot.jar,然后用java -jar的方式启动:

curl -O https://alibaba.github.io/arthas/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

使用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来获取更多参数信息

10.4 Eclipse(MAT插件)

Java堆分析器,用于查找内存泄漏

Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照

下载地址:https://www.eclipse.org/mat/downloads.php

10.4.1 Dump信息包含的内容
  • All Objects

    • Class, fields, primitive values and references(类,变量,引用)
  • All Classes

    • Classloader, name, super class, static fields(类加载器,类名称,父类,静态变量)
  • Garbage Collection Roots(GC-Roots)

    • Objects defined to be reachable by the JVM(JVM可访问对象)
  • Thread Stacks and Local Variables (本地变量和线程栈)

    • The call-stacks of threads at the moment of the snapshot, and per-frame information about local

      objects(快照时刻的线程调用堆栈,以及关于本地对象的每个栈帧信息)

10.4.2 获取Dump文件
  • 手动
    • jmap-dump:format=b,file=heap.hprof pid
  • 自动
    • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
10.4.3 使用
  • Histogram(Histogram可以列出内存中的对象,对象的个数及其大小)

    ClassName:类名称,java类名
    Objects:类的对象的数量,这个对象被创建了多少个
    ShallowHeap:一个对象内存的消耗大小,不包含对其他对象的引用
    RetainedHeap:是shallowHeap的总和,即该对象被GC之后所能回收到内存的总和
    
    • 右击类名—>ListObjects—>withincomingreferences—>列出该类的实例

    • 右击Java对象名—>MergeShortestPathstoGCRoots—>excludeall…—>找到GC

      Root以及原因

  • Leak Suspects(查找并分析内存泄漏的可能原因)

    Reports--->LeakSuspects--->Details
    
  • Top Consumers(列出大对象)

    ClassName:类名称,java类名
    Objects:类的对象的数量,这个对象被创建了多少个
    ShallowHeap:一个对象内存的消耗大小,不包含对其他对象的引用
    RetainedHeap:是shallowHeap的总和,即该对象被GC之后所能回收到内存的总和
    
    • 右击类名—>ListObjects—>withincomingreferences—>列出该类的实例

    • 右击Java对象名—>MergeShortestPathstoGCRoots—>excludeall…—>找到GC

      Root以及原因

10.5 IDEA(Jprofiler插件)

  • 1、IDEA安装 JProfiler 插件
  • 2、window上安装 JProfiler (https://www.ej-technologies.com/products/jprofiler/overview.html)
  • 3、激活
  • 4、在IDEA 中绑定 JProfiler (setting ->jprofile)
    在这里插入图片描述
10.6 GC日志分析工具

具体GC分析工具使用后续更新,敬请期待

首先需配置下 GC日志:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps Xloggc:gc.log

  • 在线查看
    • http://gceasy.io
  • GCView
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值