`
welcome66
  • 浏览: 397392 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM性能调优工具

阅读更多

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


各列含义:
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

 

  • 大小: 9.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics