JVM调优方法总结

      在这里我使用的都是JDK自带的命令 JAVA_HOME/bin/*

查看Server PID - jps

       如果需要分析某一个Server,首先当然需要知道它的PID.使用jps可以用显示当前jvm的进程,当然也可以使用ps -ef |grep java.

       命令格式:

jps [ options ] [ hostid ]

       options:         

    -q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid。
    -m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
    -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
    -v 输出传给JVM的参数。
    -V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数
     -XX:Flags=<filename>指定的文件)。
    -J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,
    使用-J  选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。

     hostid:

    

[protocol:][[//]hostname][:port][/servername]


    protocol - 如果protocol及hostname都没有指定,那表示的是与当前环境相关的本地协议,
    如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi。
    hostname - 服务器的IP或者名称,没有指定则表示本机。
    port - 远程rmi的端口,如果没有指定则默认为1099。
    servername - 注册到RMI注册中心中的jstatd的名称。


查看线程状态 - jstack

     jstack可以dump当前Server的线程运行状态。如是否存在死锁,线程数量,以及各个线程的状态,资源竞争情况等。如果现在运行的java程序呈现挂起的状态,jstack是非常有用的。

    
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP

  option:

-F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息.
-h | -help打印帮助信息

pid 需要被打印配置信息的java进程id,可以用jps查询.

查看内存分配-jmap
        jmap可以输出所有内存中对象,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如: jmap -histo pid > heap.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool )).

       jmap [ option ] pid
       jmap [ option ] executable core
       jmap [ option ] [server-id@]remote-hostname-or-IP

       option:

-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. 
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. 
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来. 
-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效. 
-h | -help 打印辅助信息 
-J 传递参数给jmap启动的jvm.


pid 需要被打印配相信息的java进程id,创业与打工的区别 博文预览,可以用jps查问.

查看新生代和老年代 - jstat

      jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。  

    jstat -class pid:显示加载class的数量,及所占空间等信息。  
    jstat -compiler pid:显示VM实时编译的数量等信息。  
    jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。  
    jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。  
    jstat -gcnew pid:new对象的信息。  
    jstat -gcnewcapacity pid:new对象的信息及其占用量。  
    jstat -gcold pid:old对象的信息。  
    jstat -gcoldcapacity pid:old对象的信息及其占用量。  
    jstat -gcpermcapacity pid: perm对象的信息及其占用量。  
    jstat -gcutil pid:统计gc信息统计。  
    jstat -printcompilation pid:当前VM执行的信息。





转载于:https://my.oschina.net/zookeeper/blog/193359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值