JVM调优篇-07
1. jps 作用与使用?
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类 Main Class, main()函数所在的类名称以及这些进程的本地虚拟机唯一 ID (LVMID, Local Virtual Machine Identifier)。虽然功能比较单一,但它绝对是使用频率最高的 JDK 命令行工具,因为其他的 JDK 工具大多需要输入它查询到的 LVMID 来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说, LVMID 与操作系统的进程 ID (PID, Process Identifier)是一致的,使用 Windows 的任务管理器或者 UNIX 的 ps 命令也可以查询到虚拟机进程的 LVMID,但如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就必须依赖 jps 命令显示主类的功能才能区分了。
- -q:只输出进程 id
- -m:输出虚拟机启动时传递给 main()方法的参数
- -l:输出主类的全名,如果执行的是 jar 包,输出 jar 包的路径
- -v:输出启动虚拟机的参数
2.jstat 作用与使用?
jstat (JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有 GUI 图形界面、只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的常用工具。
#参数interval和count代表查询间隔和次数,如果省略这2个参数,说明只查询一次。假设需要每1000毫秒查询一次进程42339垃圾收集状况,一共查询10次,那命令应当是:
jstat -gc 42339 1000 10
上图显示了各个区以及垃圾回收的情况,具体代表含义如下(C 代表 Capacity,U 代表 Used 已使用大小)
- S0C 和 S1C 代表 Survivor 区的 S0 和 S1 的大小
- S0U 和 S1U 表示已使用空间
- EC 表示 Eden 区大小,EU 表示 Eden 区已使用容量
- OC 表示老年代大小,OU 代表老年代已使用容量
- MC 表示方法区大小,MU 表示方法区已使用容量
- CCSC 表示压缩类空间大小,CCSU 表示压缩类空间已使用大小
- YGC 表示新生代 GC 次数,YGT 表示新生代 GC 总耗时
- FGC 表示 Full GC 次数,FGCT 表示 FULL GC 总耗时
- GCT 表示 GC 总耗时时间
选项 option 代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况。
3.jstack 作用?
jstack (Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过 jstack 来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
jstack 进程号 > stack1.log
option 选项的合法值与具体含义下图所示。
从 JDK 5 起, java.lang.Thread 类新增了一个 getAllStackTraces()方法用于获取虚拟机中所有线程的 StackTraceElement 对象。使用这个方法可以通过简单的几行代码完成 jstack 的大部分功能,在实际项目中不妨调用这个方法做个管理员页面,可以随时使用浏览器来查看线程堆栈
4.jinfo 作用与使用?
jinfo (Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。注意,如果是修改,参数类型是 manageable 类型才能修改。
#查看某个java进程的name属性的值
jinfo -flag name PID
5.jmap 作用与使用?
jmap (Memory Map for Java)命令用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。
jmap 的作用并不仅仅是为了获取堆转储快照,它还可以查询 finalize 执行队列、Java 堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。
#打印出堆内存相关信息
jmap -heap PID
#生成dump文件
jmap -dump:format=b,file=/usr/heap.hprof pid
#OOM时自动生成dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
jmap 可以添加的参数如下:
6.jhat 作用与使用?
JDK 提供 jhat (JVM Heap Analysis Tool)命令与 jmap 搭配使用,来分析 jmap 生成的堆转储快照。
jhat heap.hprof
然后访问地址 http://localhoust:7000/ 可以看到这款工具展示的信息比较简单。
生产上应该结合 dump 文件分析工具 MAT 或者 VisualVM 工具进行分析使用
JVM调优篇-07
- 点赞
- 收藏
- 关注作者
评论(0)