欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JVM性能调优工具

程序员文章站 2022-06-15 17:45:46
...

1.  jps(Java Virtual Machine Process Status Tool)

jps主要用来输出JVM中运行的进程状态信息。

命令格式:

    jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。

命令行参数选项说明:

    -q 不输出类名、Jar名和传入main方法的参数

    -m 输出传入main方法的参数

    -l 输出main类或Jar的全限名

    -v 输出传入JVM的参数

示例:

[root@h-yfc47xqw ~]# jps -m -l

551 -- process information unavailable

12901 -- process information unavailable

20823 -- process information unavailable

9726 -- process information unavailable

18823 sun.tools.jps.Jps -m -l

9730 -- process information unavailable

9728 -- process information unavailable

8278 -- process information unavailable

11265 org.apache.zookeeper.server.quorum.QuorumPeerMain config/zookeeper.properties

25349 kafka.Kafka ../config/server.properties

 2. jstack

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

stack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。

命令格式:

    jstack [option] pid

    jstack [option] executable core 

    jstack [option] [server-id@]remote-hostname-or-ip

命令行参数选项说明:

    -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

    -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

示例,查找最耗费内存的代码:

    1)Java进程ID:21711 

    2)该进程内最耗费CPU的线程:top

    3)取得进程ID的16进制:printf "%x\n" 进程号

    4)# jstack 21711 | grep 54ee

"PollIntervalRetrySchedulerThread" prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait() [0x00007f94c6eda000]

 

 3. jmap(Memory Map)和jhat(Java Heap Analysis Tool)

jmap用来查看堆内存使用状况,一般结合jhat使用。

命令格式:

    jmap [option] pid

    jmap [option] executable core

    jmap [option] [server-id@]remote-hostname-or-ip

命令行参数选项说明:

    <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

    -permstat            to print permanent generation 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 -permstat pid

打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息

    jmap -heap pid

查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况

    jmap -histo[:live] pid

查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象

    jmap -dump:format=b,file=dumpFileName pid

用jmap把进程内存使用情况dump到文件中,再用jhat分析查看,注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存。jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在浏览器中输入主机地址:9998查看了

 

4. jstat(JVM统计监测工具)

命令格式:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目

示例:

# jstat -gc 21711 250 4

采样时间间隔为250ms,采样数为4


JVM性能调优工具
            
    
    博客分类: JVMjava jvm调优 

各列含义:
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)

EC、EU:Eden区容量和使用量

OC、OU:年老代容量和使用量

PC、PU:永久代容量和使用量

YGC、YGT:年轻代GC次数和GC耗时

FGC、FGCT:Full GC次数和Full GC耗时

GCT:GC总耗时

5. hprof(Heap/CPU Profiling Tool)

hprof能够展现CPU使用率,统计堆内存使用情况。

命令格式:

java -agentlib:hprof[=options] ToBeProfiledClass

java -Xrunprof[:options] ToBeProfiledClass

javac -J-agentlib:hprof[=options] ToBeProfiledClass

 

  • JVM性能调优工具
            
    
    博客分类: JVMjava jvm调优 
  • 大小: 9.9 KB
相关标签: jvm 调优