JVM性能调优监控工具

Stella981
• 阅读 618

最近读取大文件老是遇到OutOfMemoryError报错

JVM性能调优监控工具有哪些呢?

jps      jstatd     jinfo     jstack    jmap     jhat    jstat

1.jsp(Java Virtual Machine Process Status Tool)

输出JVM中运行的进程状态信息

jps [-q] [-mlvV] [<hostid>]

[options]

-q  仅输出VM标识符,不包括class name,jar name,arguments in main method 
-m 输出main method的参数 
-l  输出完全的包名,应用主类名,jar的完全路径名 
-v  输出jvm参数 

  -V 输出通过flag文件传递到JVM中的参数

[hostid]

 [:]

JVM性能调优监控工具

jps 支持查看远程服务上的 jvm 进程信息。

如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务。

 2.jstatd(Virtual Machine jstat Daemon)

是一个基于RMI(Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令

jstatd [-nr] [-p port] [-n rminame]

-nr:当没有找到现有的RMI注册表时,不会尝试在jstatd进程中创建内部RMI注册表

-p port:希望找到RMI注册表的端口号,或者如果未找到,则在未指定-nr的情况下创建RMI注册表

-n rminame:远程RMI对象在RMI注册表中绑定的名称。 默认名称是JStatRemoteHost

-J (option):将选项传递给java程序

启动 jstatd 服务,需要有足够的权限。 需要使用 Java 的安全策略分配相应的权限

创建 tools.policy 策略文件

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

启动 jstatd 服务器,默认端口是1099

jstatd -J-Djava.security.policy=d:\tools.policy

jstatd -J-Djava.security.policy=d:\tools.policy -J-Djava.rmi.server.hostname=192.168.31.135

JVM性能调优监控工具

3.jinfo

查看 Java 进程运行的 JVM 参数

Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

先用 jps 命令查到 PID ,然后可以通过 jinfo 来查看对应进程的参数信息

输出当前 jvm 进程的全部参数和系统属性

JVM性能调优监控工具

tomcat的最大内存

JVM性能调优监控工具

查看垃圾回收器

 JVM性能调优监控工具

4.jstack

jstack主要用来查看某个Java进程内的线程堆栈信息

Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

JVM性能调优监控工具

5.jmap(Memory Map)

Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

jmap pid
描述:查看进程的内存映像信息

JVM性能调优监控工具

jmap -heap pid
描述:显示Java堆详细信息

JVM性能调优监控工具

jmap -histo:live pid
描述:显示堆中对象的统计信息

包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。

jmap -histo:live 14480>e:/jmap.txt

JVM性能调优监控工具

jmap -finalizerinfo pid
描述:打印等待终结的对象信息

JVM性能调优监控工具

jmap -dump:format=b,file=path  pid
描述:生成堆转储快照dump文件

JVM性能调优监控工具

6.jhat(Java Heap Analysis Tool)

  jhat是一个Java堆复制浏览器。这个工具分析Java堆复制文件(如上面的"jmap -dump"所产生的)。Jhat启动一个允许堆中的对象在web浏览器中进行分析的web服务器。

  默认端口为7000

JVM性能调优监控工具

在通过浏览器访问 http://127.0.0.1:7000/ 即可看到分析结果

JVM性能调优监控工具

如果解析过程中出现内存不足,需要加大内存

JVM性能调优监控工具

7.jstat(Java Virtual Machine statistics monitoring tool)

显示gc的信息,查看gc的次数,及时间

jstat -gc

JVM性能调优监控工具

JVM性能调优监控工具

S0C   年轻代中第一个survivor(幸存区)的容量 (字节)

S1C   年轻代中第二个survivor(幸存区)的容量 (字节)

S0U   年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U   年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC      年轻代中Eden的容量 (字节) 

EU      年轻代中Eden目前已使用空间 (字节)

OC      Old代的容量 (字节)

OU     Old代目前已使用空间 (字节)

MC     方法区的容量 (字节)

MU     方法区目前已使用空间 (字节)

CCSC   压缩类空间的容量 (字节)

CCSU    压缩类空间目前已使用空间 (字节)

YGC      从应用程序启动到采样时年轻代中gc次数

YGCT    从应用程序启动到采样时年轻代中gc所用时间(s)

FGC       从应用程序启动到采样时old代(全gc)gc次数

FGCT     从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT       从应用程序启动到采样时gc用的总时间(s)

显示VM内存中三代(young,old,perm)对象的使用和占用大小

JVM性能调优监控工具

JVM性能调优监控工具

NGCMN    年轻代(young)中初始化(最小)的大小(字节)

NGCMX    年轻代(young)的最大容量 (字节)

NGC        年轻代(young)中当前的容量 (字节)

S0C       年轻代中第一个survivor(幸存区)的容量 (字节)

S1C       年轻代中第二个survivor(幸存区)的容量 (字节)

EC         年轻代中Eden的容量 (字节)

OGCMN     old代中初始化(最小)的大小 (字节)

OGCMX     old代的最大容量(字节)

OGC          old代当前新生成的容量 (字节)

OC             old代的容量 (字节)

MCMN       方法区的初始化(最小)的大小 (字节)

MCMX      方法区的最大容量(字节)

MC            方法区的容量(字节)

CCSMN    压缩类空间的初始化(最小)的大小 (字节)

CCSMX     压缩类空间的最大容量(字节)

CCSC    压缩类空间的容量 (字节)

YGC   从应用程序启动到采样时年轻代中gc次数

FGC  从应用程序启动到采样时old代(全gc)gc次数

统计gc信息

JVM性能调优监控工具

S0: 幸存区0
S1: 幸存区1
E:年轻代
O:年老代
M:元空间
(已使用所占百分比)

YGC : 年轻代YGC的次数
YGCT :年轻代YGC所消耗的时间
FGC : 年老代full GC的次数
FGCT :年老代full GC所消耗的时间
GCT : 用于GC所消耗的总时间

每隔3s钟采集一次数据,采集3次

 JVM性能调优监控工具

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

JVM性能调优监控工具

JVM性能调优监控工具

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

JVM性能调优监控工具

JVM性能调优监控工具

**jstat -gcold **:old代对象的信息

JVM性能调优监控工具

JVM性能调优监控工具

stat -gcoldcapacity : old代对象的信息及其占用量

JVM性能调优监控工具

JVM性能调优监控工具

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

JVM性能调优监控工具

 JVM性能调优监控工具

Compiled 编译任务的数目

Size 方法生成的字节码的大小

Type 编译类型

Method 类名和方法名用来标识编译的方法

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

JVM性能调优监控工具

Loaded 装载的类的数量

Bytes 装载类所占用的字节数

Unloaded 卸载类的数量

Bytes     卸载类的字节数

Time   装载和卸载类所花费的时间

jstat -compiler 显示VM实时编译的数量等信息。

JVM性能调优监控工具

Compiled 编译任务执行的数量

Failed  编译任务执行失败的数量

Invalid   编译任务执行失效的数量

Time    编译任务消耗时间

FailedType  最后一个编译失败的任务的类型

FailedMethod 最后一个编译失败任务所在的类及方法

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
6个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这