JDK命令行工具与可视化工具

本文介绍了在Linux环境下,如何使用jstat监控JVM性能,包括内存使用、垃圾回收情况和类装载。同时提及了jmap和jhat用于堆快照分析,以及JConsole用于实时监控。此外,还强调了Java开发者在面试前准备的重要性,推荐了一份全面的Java学习资料以助于技能提升。
摘要由CSDN通过智能技术生成

}

复制代码

image

jstat:虚拟机信息监控工具

jstat:Linux环境上,运行期定位JVM性能问题的首选工具,常用来查看内存变化趋势,GC情况、类加载情况等

使用格式 : jstat [option vmid [interval [s|ms] [count]] ]

  • option 代表我们所要查询的虚拟机细信息。主要包括:类装载,垃圾回收,运行期编译情况

  • vmid 若是运行在本地的虚拟机进程那就是程序运行的pid,若是远程虚拟机,格式应该是 [protocol:][//]lvmid[@hostname[:port]/servername]

  • interval 查询间隔

  • count 查询次数

忽略interval和count参数,那么命令只会执行一次 比如 jstat -gc 2101 500 5 表示每500ms查询一次2101进程的垃圾回收情况,一共执行5次

示例一:

public class DEMO02 {

public static void main(String[] args) throws IOException {

System.out.println(“jstat”);

System.in.read();

}

}

复制代码

image

image

S0C,S1C是指Survivor0区1区的容量;S0U,S1U是指这两幸存区的使用量;C代表Capacity,U代表Used,上面反应的是各个区的初始容量以及使用情况,GC的次数和时间。

示例二:

import java.io.IOException;

public class DEMO03 {

//启动参数设置:-Xms20M -Xmx20M -Xmn10M -xx:+UseserialGC -XX: +PrintGcDetails -verbose:gc

public static void main(String[] args) throws IOException {

final int _1MB = 1024 * 1024;

byte[] b1 = new byte[_1MB];

System.out.println(“1…”);

System.in.read();

byte[] b2 = new byte[2*_1MB];

System.out.println(“2…”);

System.in.read();

byte[] b3 = new byte[2*_1MB];

System.out.println(“3…”);

System.in.read();

}

}

复制代码

指定DEMO03运行时JVM参数,设置堆区为20M,新生代10M,使用Serial垃圾收集器

image

image

可以看到在三次打印中,Eden区发生的变化,发生了一次YoungGC,GC时间是0.015S

image

jstack:查看Java线程堆栈信息

使用格式: jstack [option] vmid

image

示例一:一段死循环ava程序,模拟linux环境下疯狂占用cpu资源

improt java.util.Random;

public class demo {

public static void main(String[] args) {

while(true){

System.out.println(new Random().nextInt(77778888));

}

}

}

复制代码

查看系统状况:用top命令去查各个进程CPU、内存的资源消耗情况,找出最耗资源的进程pid,如图所示,最耗资源的是java进程,pid是2818【需要在后台运行很长时间才会有反应…】

image

定位到问题线程:定位到具体的问题线程 ps -mp pid -o THREAD,tid,time 如图所示在java进程中2819的线程最耗资源

image

查看问题线程的堆栈信息:先将线程id转换为16进制(英文小写格式) printf “%x\n” 问题线程的id转为16进制英文小写

image

在使用jstack查看线程的堆栈信息 jstack pid |grep tid -A60

image

由此便可以查看到是demo.java中的第六行出了问题【此处只是小demo去模拟程序死循环,CPU线上预警出现的可能性很多,常见的还有内存泄露、死锁、频繁GC…需要结合linux命令和java命令和实际情况进行逐步排查】

jinfo:查看/设置虚拟机的参数

jinfo可以查看JVM的参数,并允许在程序运行期间修改JVM的参数,这样JVM就不用重启了。

使用格式: jinfo [option] pid ,可以通过-flag[+|-] name 添加和删除一些参数,或者-flag name =value修改一些参数,但是很多参数是不允许修改的

image

public class DEMO04 {

public static void main(String[] args) throws IOException {

System.out.println(“jinfo”);

System.in.read();

}

}

复制代码

image

image

jmap:生成dump文件

jmap用于生成一份堆存储快照(dump),把Java堆区的使用情况快照一份导出来供我们排查问题。

使用格式 : jmap [option] vmid

image

示例:

public class DEMO05 {

public static void main(String[] args) throws IOException {

System.out.println(“jmap”);

System.in.read();

}

}

复制代码

显示堆区的详细信息 jmap -heap pid

image

生成堆快照存储文件,format=b生成的是二进制文件, jmap -dump:live,format=b,file=D:\jmap.bin pid

image

jhat:虚拟机存储快照分析工具

使用jmap将堆区的快照文件导出后,可以使用jhat进行分析,不过jhat现在使用较少。

使用格式: jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help]

image

示例:

image

image

可视化工具

jconcle

作用:查看Java应用程序运行时情况,监视垃圾收集器的内存变化趋势,以及监视程序内的线程。

示例一:JConsole演示内存变化

public class DEMO07 {

public static void main(String[] args) throws IOException, InterruptedException {

Thread.sleep(5000);

System.out.println(“start…”);

test();

System.in.read();

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

三面蚂蚁核心金融部,Java开发岗(缓存+一致性哈希+分布式)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!**

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

[外链图片转存中…(img-Ypy8Z4nq-1711785319433)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值