命令行篇
简单的命令行工具
java、javac
2、jps:查看正在运行的Java进程
jps全称为:Java Process Status,用于显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查看正在运行的虚拟机进程。(说明:对于本地虚拟机进程来说,进程的本地虚拟机ID和操作系统的进程ID是一致的,是唯一的。)
-q:仅仅显示LVMID(local virtual machine id),即本地虚拟机唯一id,不显示主类的名称等
-l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
-m:输出虚拟机进程启动时传递给主类main的参数
-v:列出虚拟机进程启动时的JVM参数。比如:-Xms20m -Xmx50m是启动程序指定的jvm参数。
说明:以上参数均可综合使用
补充:如果某Java进程关闭了默认开启的UserPerfDate参数(即使使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该Java进程。
3、jstat:查看JVM统计信息
jstat全称为:JVM Statistics Monitor Tool,用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据。在没有GUI图形界面,只是提供纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题。
option参数:由以下值构成:
- 类装载相关的:
- -class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等。
- 垃圾回收相关的:
- -gc:显示与GC(Garbage Collection)相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。
- -gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
- -gcutil:显示内容与-gc基本相同,但是输出主要关注已使用空间占总空间的百分比。
- -gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前发生的GC产生的原因。
- -gcnew:显示新生代GC状况。
- -gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间。
- -geold:显示老年代GC状况
- JIT相关的:
- -compiler:显示JIT编译器编译过的方法、耗时等信息。
- -printcompilation:输出已经被JIT编译的方法。
interval参数
用于指定输出统计数据的周期,单位为毫秒。即:查询间隔。
count参数
用于指定查询的总次数
-t参数
可以在输出信息前加上一个Timestamp列,显示程序的运行时间,单位为秒
-h参数
可以在周期性数据输出时,输出多少行数据后输出一个表头信息。
4、jinfo:实时查看和修改JVM配置参数
查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数。在很多情况下,Java应用程序不会指定所有的java虚拟机参数。而此时,开发人员可能不知道某一个具体的Java虚拟机参数的默认值。在这种情况下,可能需要通过查找文档来获取某一个参数的默认值。这个查找的过程可能是非常艰难的。但是有了jinfo工具,开发人员可以很方便地找到Java虚拟机参数的当前值。
jinfo不仅可以查看运行时某一个Java虚拟机参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。但是并非所有参数都支持动态修改。参数只有被标记为manageable的flag可以被实时修改。其实,这个修改能力是极其有限的。
5、jmap:导出内存映像文件&内存使用情况
6、jhat:JDK自带堆分析工具
7、jstack:打印JVM中线程快照
GUI篇
1、jconsole
2、jvisualvm
一个功能强大的多合一故障诊断和性能监控的可视化工具,集成了多个jdk命令行工具,可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)等,甚至代替JConsole。jvisualvm集成在了jdk下,也可做为独立的软件安装。
主要功能:
- 本地连接:…
- 远程连接:
- 确定远程服务器的IP地址
- 添加JMX(通过JMX技术具体监控远端服务器哪个Java进程)
- 修改bin/catalina.sh文件,连接远程的tomcat
- 在…/conf中添加jmxremote.access和jmxremote.password文件
- 将服务器地址改为公网IP地址
- 设置阿里云安全策略和防火墙策略
- 启动tomcat,查看tomcat启动日志和端口监听
- JMX中输入端口号、用户名、密码登录