听说月入30k的大佬都在使用这些故障检查工具

面试三连

面试官:了解JVM吗?

小明:知道一点....

面试官:那你说一下什么是JVM?

小明:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

面试官:那如果现在服务器出现cpu飙升的情况,你该如何追踪问题呢?

小明:查看日志。

面试官:那如果日志没有展示呢?比如死锁、死循环等等这些只要不是内存溢出,日志是不会抛出异常的,你怎么追踪到是死锁或者死循环导致的cpu飙升呢?

小明:这个。。。。。不太清楚。

面试官:好了,我知道了,回去等通知吧。

小明又被面试官教育了,哈哈哈,所以说,没事多学习,并不是空穴来风,在必要的时候可能是你的救命稻草。

故障处理工具

其实java已经给我们提供了很多的故障处理工具,只是我们没有使用而已,我们一起来看看java都给我提供了哪些故障工具

这是jdk1.8 bin目录,如果有人使用过这里面的工具的话就知道,jps和jinfo都是java提供给我们工具。

注意:如果需要在jdk1.5的虚拟机上田间监控功能,需要在程序启动的时候添加参数:`-Dcom.sum.management.jmxremote`,否则大部分的工具都无法使用,如果jdk在1.6或以上的话,JMX管理是默认开启de.suoyi不要在启动的时候添加参数。

jps(JVM Process Status)

jps:虚拟机进程状况工具

他的功能和ps命令有点类似,可以展示出正在运行的虚拟机进程,并展示虚拟机执行的主类(Main函数所在的位置)名称以及这些进程的本地虚拟机唯一ID(LVMID),他是日常开发中最长使用的命令之一,当本地虚拟机唯一ID是非常重要的,我们需要通过它来确定我们需要监控的是哪一个虚拟机进程。对于本地来说,虚拟机进程与操作系统的进程是一致的,如果同时启动了多个虚拟机进程,无法通过进程名来定位时,就需要通过jps命令来展示主类才能区分。

好了,我们一起来看看jps的基本语法。

参数介绍

 

 

 

这个工具的命令还是很简单的,却也是最常使用的一个。

 jstat(JVM Statistics Monitoring Tool)

jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

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

如果是本地虚拟机进程,vmid就是虚拟机ID(LVIMID),如果是远程虚拟机,那VMID的格式应该是:

[protocol : ] [ // ]  lvmid [@hostname:[:port] /servername]

interval:查询的时间间隔。

count:查询的次数。

比如下面这行命令

jstat -gc 27088 1000 5

表示一秒查询一次进程27088的垃圾收集情况,一共执行5次。

原想option表示查询的虚拟机信息,一共分为三种:`类加载`、`垃圾收集`、`运行期编译状况`,参数详情如下:

 

 

这里随便查询一条信息

jstat -class 5276

jinfo:配置信息工具

jinfo的作用是实时查看和调整虚拟机的各项参数,其实上面说的jps -v也能查询到jvm的参数列表,但是它仅仅只能查到显式指定的参数列表,而jinfo可以查询到违背指定的显式参数列表,如果我们需要查看系统的默认值,我们可以通过jinfo的flag查询。

jinfo的基本格式

jinfo -[option] pid

比如我要查询某个进程jvm的参数,可以这样写

jinfo -flags 13012

 

 

查询java的系统参数

jinfo -sysprops 13012

这些都是查询,刚才说到jinfo可以实时修改参数,怎么修改呢》

jinfo -flag  <name> pid:输出指定JVM的参数值 

jinfo -flag  [+|-]<name> pid:设置指定JVM参数的布尔值

jinfo -flag  <name>=<value> pid:设置指定JVM参数的值

 

如果我现在想设置Xms

jinfo -flag  Xms=64m  13012

 

我靠,居然报错了,提示Xms不能被修改,好吧,可能是windows平台的限制,大家可以使用linux试试。

 

jmap:内存映像工具

jmap命令用于生成堆转储快照(一般称为heapdump转dump文件)。

当然了,jmap的作用并不仅仅是为了获取堆转储的快照,它还可以查询finalize执行队列、java堆和方法区的详细信息,如空间使用率、当前使用的是哪种收集器等。

jmap有些功能在windows平台是受限制的,所以在使用的时候推荐linux。

jmap使用格式

jmap [option] vmid

vmid:上面讲过了,可以理解为id。

 

jstack:堆栈跟踪工具

jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成快照的目的通常时定位线程出现长时间停顿的原因,比如线程之间的死锁、死循环、请求外部资源时间过长等等,都是导致线程长时间卡顿的原因之一,我们可以在线程卡顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程在后台干了啥见不得人的坏事。

使用格式

jstack [option] vmid

选项作用-F将正常输出的请求不被响应时,强制输出线程堆栈。-l除堆栈外,显示关于锁的附加信息-m如果调用本地方法的话,可以显示c/c++的堆栈

比如:

jstack -l 13012

基础工具总结

jdk的工具远远不止上面介绍的这几种,还有很多很多,有些工具随着jdk的升级而移除,有的则是一直坚挺,我们一起来看看jdk都有哪些基础工具吧

基础工具:用于支持基本的程序创建和运行

 

安全:用于程序签名、设置安全测试等

 

 

 

国家化:用于创建本地语言文件

 

 

 

远程方法调用:用于跨web或者网络的服务交互

 

 

 

部署工具:用于程序打包、发布和部署

 

 

java web start

 

性能监控和故障处理:用于监控分析java虚拟机运行信息。

 

 

webservice工具

 

 

 

REPL和脚本工具

 

声明:此篇文章参考:《深入理解java虚拟机》 第三版

 

我会经常分享一些java的技术文章,想要学习java的小伙伴可以关注我哦!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值