可以建设一个网站,安徽搜索引擎优化seo,坪地网站建设包括哪些,织梦网站 防黑文章目录 一、前言二、Java问题诊断和排查工具1、JDK自带工具2、常用命令3、JAVA Dump#xff1a;3.1、jps3.2、jstack3.3、jmap3.3.1、jmap -heap pid:查看堆使用情况3.3.2、jmap -histo pid#xff1a;查看堆中对象数量和大小3.3.3、jmap -dump:formatb,fileheapdump pid3.1、jps3.2、jstack3.3、jmap3.3.1、jmap -heap pid:查看堆使用情况3.3.2、jmap -histo pid查看堆中对象数量和大小3.3.3、jmap -dump:formatb,fileheapdump pid将内存使用的详细情况输出到文件 3.4、jstat 三、总结 一、前言
在数字世界中Java作为一种流行的编程语言广泛应用于开发各种类型的应用程序。然而在开发过程中不可避免地会出现各种问题。本文将探讨一些用于诊断和排查Java问题的工具。
二、Java问题诊断和排查工具
1、JDK自带工具
在JDK的bin目录下有很多命令行工具 可以看到各个工具的大小基本上都稳定在27kb左右这个不是JDK开发团队刻意为之的而是因为这些工具大多数是 jdk\lib\tools.jar 类库的一层薄包装而已他们的主要功能代码是在tools类库中实现的。
命令行工具的好处是当应用程序部署到生产环境后无论是直接接触物理服务器还是远程telnet到服务器上都会受到限制。而借助tools.jar类库里面的接口我们可以直接在应用程序中实现功能强大的监控分析功能。
2、常用命令 1、jps查看本机java进程信息
2、jstack打印线程的栈信息制作 线程dump文件
3、jmap打印内存映射信息制作 堆dump文件
4、jstat性能监控工具
5、jhat内存分析工具用于解析堆dump文件并以适合人阅读的方式展示出来
6、jconsole简易的JVM可视化工具
7、jvisualvm功能更强大的JVM可视化工具
8、javap查看字节码
3、JAVA Dump
JAVA Dump就是虚拟机运行时的快照将虚拟机运行时的状态和信息保存到文件中包括
线程dump包含所有线程的运行状态纯文本格式
堆dump包含所有堆对象的状态二进制格式
3.1、jps
显示当前所有java进程pid的命令我们可以通过这个命令来查看到底启动了几个java进程因为每一个java程序都会独占一个java虚拟机实例不过jps有个缺点是只能显示当前用户的进程id要显示其他用户的还只能用linux的ps命令。
执行jps命令会列出所有正在运行的java进程其中jps命令也是一个java程序。前面的数字就是进程的id这个id的作用非常大后面会有相关介绍。
jps -help jps -l 输出应用程序main.class的完整package名或者应用程序jar文件完整路径名 jps -v 输出传递给JVM的参数 jps失效
我们在定位问题过程会遇到这样一种情况用jps查看不到进程id用ps -ef | grep java却能看到启动的java进程。
要解释这种现象先来了解下jps的实现机制
java程序启动后会在目录/tmp/hsperfdata_{userName}/下生成几个文件文件名就是java进程的pid因此jps列出进程id就是把这个目录下的文件名列一下而已至于系统参数则是读取文件中的内容。
我们来思考下如果由于磁盘满了无法创建这些文件或者用户对这些文件没有读的权限。又或者因为某种原因这些文件或者目录被清除出现以上这些情况就会导致jps命令失效。
如果jps命令失效而我们又要获取pid还可以使用以下两种方法
1、top | grep java
2、ps -ef |grep java3.2、jstack
主要用于生成指定进程当前时刻的线程快照线程快照是当前java虚拟机每一条线程正在执行的方法堆栈的集合生成线程快照的主要目的是用于定位线程出现长时间停顿的原因如线程间死锁、死循环、请求外部资源导致长时间等待。
3.3、jmap
主要用于打印指定java进程的共享对象内存映射或堆内存细节。
堆Dump是反映堆使用情况的内存镜像其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。一般在内存不足GC异常等情况下我们会去怀疑内存泄漏这个时候就会去打印堆Dump。
3.3.1、jmap -heap pid:查看堆使用情况 3.3.2、jmap -histo pid查看堆中对象数量和大小 打印的信息分别是序列号、对象的数量、这些对象的内存占用大小、这些对象所属的类的全限定名
如果是内部类类名的开头会加上*如果加上live子参数的话如jmap -histolive pid这个命名会触发一次FUll GC只统计存活对象
3.3.3、jmap -dump:formatb,fileheapdump pid将内存使用的详细情况输出到文件
然后使用jhat命令查看该文件jhat -port 4000 文件名 在浏览器中访问http:localhost:4000/
3.4、jstat
jstat是一个用于监控Java虚拟机JVM性能的命令行工具。它可以提供关于Java应用程序的垃圾收集GC、编译任务和其他运行时统计信息。jstat工具是基于命令行的可以用来生成和显示JVM的性能统计信息。
jstat工具的使用方法如下
打开命令行终端。输入以下命令格式
jstat -option [interval [count]] vmid其中option是指你想要查看的统计信息比如编译任务的数量可以使用-compiler垃圾收集可以使用-gc等。interval和count是用于连续地重复地收集数据的比如你可以设置每500毫秒收集一次数据共收集10次。vmid是虚拟机标识符它是一个整数值可以通过jps命令查看到。
例如如果我们想要查看编号为1234的Java应用程序的垃圾收集统计信息可以输入以下命令
jstat -gc 1234运行结果将会显示关于垃圾收集的各种统计信息包括新生代、老年代的使用情况垃圾回收的次数和时间等。
jstat是一个非常实用的工具它可以帮助我们诊断和解决Java应用程序的性能问题。通过使用jstat我们可以更好地了解JVM的运行情况从而优化应用程序的性能。
三、总结
该命令适用的场景是程序内存不足或者GC频繁这时候很可能是内存泄漏。通过用以上命令查看堆使用情况、大量对象被持续引用等情况。
如果本篇博客对您有一定的帮助大家记得留言点赞收藏哦。