JavaGuide知识点整理——JDK监控和故障处理处罚工具总结

手机游戏开发者 2024-9-29 06:33:41 104 0 来自 中国
JDK下令行工具

这些下令在JDK安装目次的bin目次下:

  • jsp:雷同UNIX的ps下令,用于检察全部java历程的启动类。传入参数和java虚拟机参数等信息。
  • jstat:用于网络HotSpot虚拟机各方面的运行数据。
  • jinfo:Configuration Info for Java,体现虚拟机设置信息。
  • jmap:天生堆转储快照。
  • jhat:用于分析heapdump文件,它会创建一个HTTP/HTML服务器,让用户可以在欣赏器上检察分析效果。
  • jstack:天生虚拟机当前时间的线程快照,线程快照就是当前虚拟机内每一条线程正在实验的方法堆栈的集合。
jps:检察全部java历程

jps(JVM  Process Status)下令雷同UNIX的ps下令、
jps:体现虚拟机实验主类名称以及这些历程的本地虚拟机唯一ID。
jps -q:只输出历程的本地虚拟机唯一ID.
jps -l:输出主类的全名,假如历程实验的是jar包,输出jar路径。
jps -v:输出虚拟机历程启动时JVM参数。
jps -m:输出通报给java历程main()函数的参数
jstat:监督虚拟机各种运行状态信息

jstat是用于监督虚拟机各种运行状态信息的下令行工具。它可以体现本地大概远程(需要远程主机提供RMI支持)虚拟机历程中的类信息,内存,垃圾网络,JIT编译等运行数据。在没有GUI,只提供了纯文本控制台情况的服务器上,它将是运行期间定位虚拟机性能标题的首选工具。
jstat下令利用格式:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]好比如下下令:jstat -gc -h3 17188 1000 10
表示分析历程id为 17188的gc情况,每1000ms打印一次记载,打印10次克制。每三行打印指标头部。
效果如下:

固然了实例中的-gc也可以换成别的,常见的option如下:

  • jstat -class vmid:体现ClassLoader的相干信息
  • jstat -compiler vmid:体现JIT编译相干的信息
  • jstat -gc vmid:体现与GC相干的堆信息
  • jstat -gccapacity vmid:体现各个代的容量以及利用信息
  • jstat -gcnew vmid:体现新生代信息
  • jstat -gcnewcapacity vmid:体现新生代大小和利用情况
  • jstat -gcold vmid:体现老年代和永世代举动统计。不外1.8开始由于永世代被移除了,以是只体现老年代的举动统计了。
  • jstat -gcoldcapacity vmid:体现老年代大小
  • jstat -gcpermcapacity vmid:体现永世代大小。jdk1.8被移除了。
  • jstat -gcutil vmid:体现垃圾网络信息

上述下令加上-t 参数可以在输出信息上看到Timestamp列,体现程序运行时间。
jinfo:及时检察和调解虚拟机各项参数

jinfo vmid : 输出当前jvm历程的全部参数和体系属性(第一部分是体系的属性,第二把部分是jvm的参数)。
jinfo -flag name vmid:输出对应名称的参数的具体值。好比输出MaxHeapSize,检察这个当前jvm历程是否开始打印GC日志等。


利用jinfo可以在不重启虚拟机的情况下,动态修改jvm参数。尤其是线上的情况特别有用。
利用jinfo -flag +/- name vmid  可以开启大概关闭对应名称的参数。之前我们看到是开启了gc打印的,现在关闭一下:

jmap:天生堆转储快照

jmap下令用于天生堆转储快照。假如倒霉用jmap下令,想要获取java堆转储,可以利用“-XX:+HeapDumpOnOutOfMemoryError” 参数。可以让虚拟机在OOM非常出现之后自动天生dump文件,linux下令下可以通过kill -3发送历程退出信号也能拿到dump文件。
jmap的作用不光仅是为了获取dump文件,他还可以查询finalizer实验队列,java堆和永世代的具体信息,如空间利用率,当前利用的是哪种网络器等。和jinfo一样,jmap有不少功能在windows平台下也是受限定的。
jhat:分析heapdump文件

jhat用于分析heapdump文件,它会创建一个HTTP/HTML服务器,让用户可以在欣赏器上检察分析效果。
jstack:天生虚拟机当前时间的线程快照

jstack下令用于天生虚拟机当前时间的线程快照,线程快照就是当前虚拟机每一条线程正在实验的方法堆栈的集合。
天生线程快照的目的告急是定位线程长时间出现停顿的缘故原由,如线程间死锁,死循环,哀求外部资源导致的长时间等待等。都是导致线程长时间停顿的缘故原由。线程出现停顿的时间通过jstack来检察各个线程的调用堆栈。就可以知道没有相应的线程到底在后台做了些什么事,大概在等待什么资源。
下面是死锁的demo:
public class Test {    private static Object resource1 = new Object();//资源 1    private static Object resource2 = new Object();//资源 2    public static void main(String[] args){            new Thread(() -> {                synchronized (resource1) {                    System.out.println(Thread.currentThread() + "get resource1");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread() + "waiting get resource2");                    synchronized (resource2) {                        System.out.println(Thread.currentThread() + "get resource2");                    }                }            }, "线程 1").start();            new Thread(() -> {                synchronized (resource2) {                    System.out.println(Thread.currentThread() + "get resource2");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread() + "waiting get resource1");                    synchronized (resource1) {                        System.out.println(Thread.currentThread() + "get resource1");                    }                }            }, "线程 2").start();        }    }我们启动这个main方法后去控制台检察(先用jps检察了死锁的这个线程是18532):

5.png
由于这个效果比力长,以是截图截了最关键的部分。可以看到jstack已经帮我们定位到了死锁。
JDK可视化分析工具

JConsole:java监督与管理控制台

JConsole是基于jmx的可视化监督,管理工具。可以很方便的监督本地以及远程服务器的java历程的内存利用情况。你可以在控制台输出console下令启动大概在JDK目次的bin目次找到jconsole.exe双击启动。

6.png
选择一个线程链接后就可以看到可视化页面:

内存监控

JConsole可以体现当前内存的具体信息。不光包罗堆内存/非堆内存的团体信息。还可以细化到Eden区,Survivor区等的利用情况,如下图所示:


点击右边的实验GC  按钮可以欺压应用程序实验一个full GC。
线程监控

雷同我们前面讲的jstack下令,不外这个是可视化的。
最下面有一个检测死锁的按钮,点击这个按钮可以自动为你找到发生死锁的线程和具体信息。

Visual VM:多合一故障处理处罚工具

VisualVM 提供在java虚拟机上运行的java应用程序的具体信息。在VisualVM的图形用户界面中,可以方便,快捷的检察多个java应用程序的相干信息。
Visual VM 官网:https://visualvm.github.io/ 。Visual VM 中文文档:https://visualvm.github.io/documentation.html。
VisualVM是到现在为止随着JDK发布的功能最强大的运行监督和故障处理处罚程序。官方在VisualVM的软件阐明上写了all in one的形貌。预示着他除了运行监督,故障处理处罚外,还提供了很多其他方面的功能,如性能分析。VisualVM的性能分析功能甚至比起JProfiler,YourKit等专业且收费的工具都不会逊色。而且VisualVM还有一个很大的优点:不需要被监督的程序特别 运行,因此他对于应用程序的现实性能的影响很小。使得他可以直策应用在生产情况中。这个优点是JProfiler,YourKit等工具无法媲美的。
VisualVM基于NetBeans平台开辟,因此一开始就具备了插件扩展功能的特性。通过插件扩展支持,VisualVM可以做到:

  • 体现虚拟机历程以及历程的设置,情况信息(jps,jinfo)
  • 监督应用程序的CPU,GC,堆,方法区以及线程的信息(jstat,jstack)
  • dump以及分析堆转储快照(jmap,jhat)
  • 方法级的程序运行性能分析,找到被调用最多,运行时间最长的方法。
  • 离线程序快照:网络程序的运行时设置,线程dump,内存dump等信息创建一个快照,可以将快照发送开辟者处举行bug反馈。
  • 其他plugins的无穷的大概性
这里就不先容VisualVM了,想相识的本身去看官网。
本篇条记就记到这里,假如轻微帮到你了记得点个喜好点个关注,也祝各人工作顺顺遂利,每天都有所进步!
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 16:18, Processed in 0.186461 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表