JVM---性能监控与调优(概述_JVM监控及诊断工具命令行)

概述

背景说明

1、生产环境遇到的问题?

  

2、为什么要调优?

  

3、不同阶段的考虑

  

调优概述

1、监控的依据

  

2、调优的大方向

  

性能优化的步骤

1、性能监控(发现问题)

  

  

2、性能分析(排查问题)

   

  

3、性能调优(解决问题)

  

  

性能评价/测试指标

1、停顿时间(或响应时间)

  

2、吞吐量

  

3、并发数

  同一时刻,对服务器有实际交互的请求数

4、内存占用

  Java堆区所占的内存大小

JVM监控及诊断工具-命令行

概述

  

  

  

jps(查看正在运行的Java进程)

  

基本语法    

  

  

  

  常用指令:  

    jps -l -v、jps -l

jstat(查看JVM统计信息)

  

基本语法

jstat [ generalOption ] <outputOptions> <vmid> [<interval> [<count>]]

generalOption:可选的通用选项。
-h 或 --help:显示帮助信息。
-J<option>:将 <option> 传递给 JVM。

outputOptions:用于指定输出格式的选项。
-class:类加载情况。
-compiler:编译器性能数据。
-gc:垃圾回收总体统计。
-gccapacity:堆内存容量信息。
-gcnew:新生代垃圾回收统计。
-gcnewcapacity:新生代区域的容量信息。
-gcold:老年代垃圾回收统计。
-gcoldcapacity:老年代区域的容量信息。
-gcutil:GC总体使用情况。
-printcompilation:热点代码方法的编译状态。
-t:在输出的第一列添加时间戳。
-verbose:gc:与 -gc 相同,但包含更详细的 GC 日志。

vmid:要监控的Java虚拟机的进程ID(PID)。
interval:可选参数,两次数据采集之间的间隔时间(以毫秒为单位)。
count:可选参数,表示要收集多少次数据。

 

jstat –class<pid> : 显示加载class的数量,及所占空间等信息

 

jstat -compiler <pid> : 显示VM实时编译的数量等信息

 

jstat -gc <pid>:  可以显示gc的信息,查看gc的次数,及时间

 

jstat -gccapacity <pid>:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

 

jstat -gcutil <pid>:统计gc信息

 

jstat -gcnew <pid>:年轻代对象的信息

 

jstat -gcnewcapacity<pid>: 年轻代对象的信息及其占用量

 

jstat -gcold <pid>:old代对象的信息

 

jstat -gcoldcapacity <pid>: old代对象的信息及其占用量

 

jstat -gcpermcapacity<pid>: perm对象的信息及其占用量

 

jstat -printcompilation <pid>:当前VM执行的信息

 

示例:

  jstat -gcutil 37955 1000 100

  

  

  

  

  

  

  

    可以比较 启动时间差 / GC时间差,计算出GC占运行时间的比例;

      如果比例超过20%,说明目前堆压力比较大;如果比例超过90%,说明堆没有空间,随时会发生OOM;

  

 

  

jinfo(实时查看和修改JVM配置参数)

  

基本语法

  

查看

  

 

修改

   

 

  

拓展

  

jmap(导出内存映像文件&内存使用情况)

  

基本语法

  

  

使用 

-dump 导出内存映像文件

  

  

手动方式

  

自动方式

  

  

-heap/histo 显示堆内存相关信息

jmap -heap pid

 

jmap -histo pid

 

“[“表示数组的意思,如果是二位数组则是“[[“, 后面跟着的字符表示具体的类型,下面罗列了所有的情况.

[Z = boolean
[B = byte
[S = short
[I = int
[J = long
[F = float
[D = double
[C = char
[L = any non-primitives(Object)

 

其他使用

  

小结

  

jhat(JDK自带堆分析工具) 

  jhat与jmap搭配使用;

  用于分析jmap生成的heap dump文件;

  

基本语法

  

  

jstack(打印JVM中线程快照)

  线程快照一般被称为threaddump或者javacore文件;

  指定Java进程 当前时刻 的线程快照;

  

  

基本语法

  

  

  

 

示例:

  获得某个Java进程的所有线程堆栈  jstack <pid>  jstack 18528

  将线程堆栈信息写入文件      jstack <pid> > <filename>  jstack 18528 > thread_dump.txt

   

 

jcmd(多功能命令行)

  

基本语法

  

  

  ...

jstatd(远程主机信息收集)

  

 

posted on 2022-11-30 15:47  anpeiyong  阅读(89)  评论(0编辑  收藏  举报

导航