• jvisualvm的简单使用


    1、配置启动参数

    1.1 Linux服务器

    1.1.1 启动参数配置

    Linux配置部分的内容来自互联网,文章地址
    https://blog.csdn.net/weixin_43073775/article/details/111137770
    此处只做摘录收集,方便自己查看,原文有详细介绍。可以仔细查看,老手可以掠过。
    另一篇很不错的文章:
    https://blog.csdn.net/u012550080/article/details/81605189

    在启动Linux服务器上启jar包时配置启动参数,参数如下:

    java -Djava.rmi.server.hostname=xxx.xxx.xx.xx -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxxx -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar my.jar
    

    注:

    • 如果有-javaagent参数,把以上参数放到-javaagent之前。
    • hostname为服务器运行的ip,指定的服务器端口号要开放。

    1.1.2 关闭防火墙。

    如果已经关闭可以忽略。

    # 查看防火墙是否开启
    systemctl status firewalld
    
    # 开启防火墙
    systemctl start firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 永久开放指定某端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    
    # 命令参数含义:
    # -zone:作用域
    
    # -add-port=80/tcp 添加端口,格式:端口/通讯协议
    # -permanent 永久生效,没有此参数后重启失效
    
    # 永久禁止访问某端口
    firewall-cmd --remove-port=80/tcp --permanent
    
    # 设置开开放/禁止端口后需要重启防火墙
    firewall-cmd --reload
    
    
    # 查看所有开放的端口号
    firewall-cmd --list-ports
    

    1.2 IDEA中配置

    在下图中圈起来的位置添加配置参数:

    具体参数如下:

    -Djava.rmi.server.hostname=10.7.66.181 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7777 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
    

    :hostname和port含义同上,不过hostname要填本机的ip。

    2. 启动Jvisualvm

    这个就只能在windows上进行远程连接了。

    2.1 连接服务器

    在Windows的cmd、owershell或Windows terminal上输入【jvisualvm】。(前提是要配置好了jdk的环境变量)。以Windows terminal为例如图:


    3. 简单使用

    双击IDEA的进程,随便点点,切换到监视,发现有CPU、堆、类、线程等图形化信息。此时我的机器正在编译Spring的源码,所以看到图中还是有些许变化。

    3.1 概述

    这里可以看到一些启动时的JVM参数和系统属性等信息。还可以看到线程Dump数等保存的信息。

    3.2 监视

    看到的信息如第一张图所示。点击堆Dump按钮会将当前堆的情况转储成dump文件。如下图所示:

    这里可以看到有个名为【ApplicationImpl pooled thread 649】线程正在运行,线程id是【3073】,线程状态是【TIMED_WAITING】。还可以看到线程详细的堆栈信息。至于后面的【类】和【实例】等选项卡我就不太清楚,点进去看也没发现啥。后面再继续探索。

    3.3 线程

    线程选项卡就可以显示当前进程下正在运行的线程。可以根据颜色来分辨各个线程的状态。点击右上角的【线程Dump】按钮可以生成最后一个选项卡【threaddump】的文件,和刚刚的【heapdump】文件一样,都是在某一时刻的【快照】,记录了这个时刻的堆和线程的信息。具体如下图:

    还有很多东西我也不知道是什么,知识和经验尚浅。

    3.4 抽样器

    利用抽样器对CPU进行抽样。可以点击【热点方法】进行排序,也就是会被JIT优化的方法。也可以点击创建【快照】。

    切换到线程CPU时间,可以看到使用cpu时间最长的线程名称。也可以点击【增量】将目前的【总量】统计模式切换成增量统计模式。

    点击内存抽样,可以看到差不多的内容。切换到【每个线程分配】可以看到线程【已分配的内存总字节数】统计,同样可以切换增量。右边还可以执行GC和堆dump。


    硬核内容我太菜了,我写不来:

    笔者才疏学浅,这个笔记到这儿就结束了。接下来就可以自己写死锁代码、堆内存溢出代码、栈溢出代码、多线程代码等进行内存分析啦。也可以分析线上跑的服务的内存了。

  • 相关阅读:
    换个角度认识大数据(上)——何为元数据
    如何优雅地停止Spark Streaming Job
    split("\,")引起的java.lang.ArrayIndexOutOfBoundsException异常解决方案
    spark streaming整合kafka
    Kafka相关命令
    Hive性能调优(二)----数据倾斜
    Hive SQL编译过程(转)
    Hive性能调优(一)----文件存储格式及压缩方式选择
    Hive表的几种存储格式
    spring框架之javaconfig
  • 原文地址:https://www.cnblogs.com/xzhm/p/15079902.html
Copyright © 2020-2023  润新知