命令行篇

image.png

简单的命令行工具

java、javac


2、jps:查看正在运行的Java进程

jps全称为:Java Process Status,用于显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查看正在运行的虚拟机进程。(说明:对于本地虚拟机进程来说,进程的本地虚拟机ID和操作系统的进程ID是一致的,是唯一的。)
image.png
-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图形界面,只是提供纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题。
image.png
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虚拟机参数的当前值。
image.png jinfo不仅可以查看运行时某一个Java虚拟机参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。但是并非所有参数都支持动态修改。参数只有被标记为manageable的flag可以被实时修改。其实,这个修改能力是极其有限的。


5、jmap:导出内存映像文件&内存使用情况



6、jhat:JDK自带堆分析工具



7、jstack:打印JVM中线程快照


GUI篇

1、jconsole

image.png


2、jvisualvm

一个功能强大的多合一故障诊断和性能监控的可视化工具,集成了多个jdk命令行工具,可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)等,甚至代替JConsole。jvisualvm集成在了jdk下,也可做为独立的软件安装。
image.png

主要功能:

  • 生成/读取堆内存快照
  • 查看jvm参数和系统属性
  • 查看运行中的虚拟机进程
  • 生成/查看线程快照
  • 程序资源的实时监控
  • 其它功能
    • JMX代理连接
    • 远程环境监控
    • CPU分析和内存分析

      连接

  • 本地连接:…
  • 远程连接:
    1. 确定远程服务器的IP地址
    2. 添加JMX(通过JMX技术具体监控远端服务器哪个Java进程)
    3. 修改bin/catalina.sh文件,连接远程的tomcat
    4. 在…/conf中添加jmxremote.access和jmxremote.password文件
    5. 将服务器地址改为公网IP地址
    6. 设置阿里云安全策略和防火墙策略
    7. 启动tomcat,查看tomcat启动日志和端口监听
    8. JMX中输入端口号、用户名、密码登录