JVM性能调优命令

JVM性能调优命令

常用命令

  • jps

    • java process status

    • jps -l 主类全名

    • jps -m 运行传入主类的参数

    • jps -v 虚拟机参数

    • [guaoran@localhost ~]$ sudo jps -mlv
      6753 /mnt/data/apps/demo.jar --server.port=8080 -Dfile.encoding=utf-8 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms4g -Xmx4g -Xss1m -XX:SurvivorRatio=8
      
  • jstat

    • 类加载,内存,垃圾收集,jit编译信息。官方文档

    • [guaoran@localhost ~]$ sudo jstat -gcutil  6753 2000 3
        S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
       55.23   0.00  54.03   0.01  95.78  93.86      2    0.235     0    0.000    0.235
       55.23   0.00  54.03   0.01  95.78  93.86      2    0.235     0    0.000    0.235
       55.23   0.00  54.03   0.01  95.78  93.86      2    0.235     0    0.000    0.235
      
  • jinfo

    • 实时调整和查看虚拟机参数

    • 查看JVM参数

      [gucheng@localhost ~]$ sudo jinfo -flags 6753
      Attaching to process ID 6753, please wait...
      Debugger attached successfully.
      Server compiler detected.
      JVM version is 25.131-b11
      Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=4294967296 -XX:MaxHeapSize=4294967296 -XX:MaxMetaspaceSize=268435456 -XX:MaxNewSize=1431306240 -XX:MetaspaceSize=268435456 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=1431306240 -XX:OldSize=2863661056 -XX:SurvivorRatio=8 -XX:ThreadStackSize=1024 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
      Command line:  -Dfile.encoding=utf-8 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms4g -Xmx4g -Xss1m -XX:SurvivorRatio=8
      
    • 实时调整JVM参数

      [gucheng@localhost ~]$ sudo  jinfo -flag PrintGC 6753
      -XX:-PrintGC
      [gucheng@localhost ~]$ sudo  jinfo -flag PrintGCDetails 6753
      -XX:-PrintGCDetails
      [gucheng@localhost ~]$ sudo  jinfo -flag PrintGCTimeStamps 6753
      -XX:-PrintGCTimeStamps
      [gucheng@localhost ~]$ sudo  jinfo -flag +PrintGC 6753
      [gucheng@localhost ~]$ sudo  jinfo -flag +PrintGCDetails 6753
      [gucheng@localhost ~]$ sudo  jinfo -flag +PrintGCTimeStamps 6753
      [gucheng@localhost ~]$ sudo  jinfo -flag PrintGC 6753
      -XX:+PrintGC
      
  • jmap

    • 查看整个JVM内存状态

    • jmap -dump:formart=b,file=filepath pid

    • 堆内存 dump

      sudo jmap -dump:format=b,file=/mnt/users/guaoran/dpmanage.hprof 6753
      
    • 打印当前java堆中各个对象的数量、大小。如果添加了live,只会打印活跃的对象。

      sudo jmap -histo 6753 > ./log.txt
      
    • 打印java堆的配置情况和使用情况,还有使用的GC算法。

      [gucheng@localhost ~]$ sudo jmap -heap 6753
      Attaching to process ID 6753, please wait...
      Debugger attached successfully.
      Server compiler detected.
      JVM version is 25.131-b11
      
      using thread-local object allocation.
      Parallel GC with 4 thread(s)
      
      Heap Configuration:
         MinHeapFreeRatio         = 0
         MaxHeapFreeRatio         = 100
         MaxHeapSize              = 4294967296 (4096.0MB)
         NewSize                  = 1431306240 (1365.0MB)
         MaxNewSize               = 1431306240 (1365.0MB)
         OldSize                  = 2863661056 (2731.0MB)
         NewRatio                 = 2
         SurvivorRatio            = 8
         MetaspaceSize            = 268435456 (256.0MB)
         CompressedClassSpaceSize = 1073741824 (1024.0MB)
         MaxMetaspaceSize         = 268435456 (256.0MB)
         G1HeapRegionSize         = 0 (0.0MB)
      
      Heap Usage:
      PS Young Generation
      Eden Space:
         capacity = 1145044992 (1092.0MB)
         used     = 800942376 (763.8381729125977MB)
         free     = 344102616 (328.16182708740234MB)
         69.94855063302177% used
      From Space:
         capacity = 143130624 (136.5MB)
         used     = 1383848 (1.3197402954101562MB)
         free     = 141746776 (135.18025970458984MB)
         0.9668427072601877% used
      To Space:
         capacity = 143130624 (136.5MB)
         used     = 0 (0.0MB)
         free     = 143130624 (136.5MB)
         0.0% used
      PS Old Generation
         capacity = 2863661056 (2731.0MB)
         used     = 348088896 (331.96343994140625MB)
         free     = 2515572160 (2399.0365600585938MB)
         12.155380444577307% used
      
      34802 interned Strings occupying 3989888 bytes.
      [gucheng@localhost ~]$ 
      
  • jstack

    • 主要用来查看Java线程的调用堆栈的,可以用来分析线程问题

    • sudo jstack 6753 > ./jstack.txt
      
    • 将线程ID转换成十六进制

      printf "%x\n" 2866
      
    • jconsole 和jvisualVM 监控远程应用(开放端口不行,把防火墙关了)

      java 
      -Djava.rmi.server.hostname=192.168.20.60 -Dcom.sun.management.jmxremote 
      -Dcom.sun.management.jmxremote.port=1099 
      -Dcom.sun.management.jmxremote.authenticate=false 
      -Dcom.sun.management.jmxremote.ssl=false 
      -jar xxx.jar
      

JVM 参数设置

  • 线程栈内存设置

    -XX:ThreadStackSize-Xss 是指设定每个线程的堆栈大小,默认(JDK5.0+)1M

  • 堆内存设置(逻辑上:堆内存=老年代堆内存+新生代堆内存+非堆[方法区(1.8是元空间)])

    -XX:InitialHeapSize-Xms 初始化堆内存,

    -XX:MaxHeapSize-Xmx 最大分配堆内存 ,

    建议 -Xms与-Xmx相同,why?

    其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。

    如果二者不等,最开始的时候堆大小是Xms,随着heap内存消耗,jvm很有可能需要申请更大的空间直到Xmx;相似的,jvm在申请到Xmx空间时可能又用不了,这时会缩小jvm空间,这样,虽然可以动态调整jvm堆申请的大小,但是每一次调整都需要一定的系统开销(jvm与os之间)。

  • 老年代堆内存设置

    -XX:OldSize: 表示老年代初始内存的大小。

  • 新生代堆内存设置

    -XX:NewSize:表示新生代初始堆内存的大小,应该小于-Xms的值;

    -XX:MaxNewSize:表示新生代最大堆内存,应该小于-Xmx的值

    -Xmn:表示同时设置新生代的初始化堆内存大小和新生代最大堆内存大小相同(-XX:NewSize=-XX:MaxNewSize=-Xmn

    • 设置新生代Eden和Survivor(S0,S1)的比值,即:Eden:s0:s1=8:1:1

      -XX:SurvivorRatio: 表示新生代Eden和Survivor划分比例,默认是8

  • 设置老年代堆内存与新生代堆内存的比值,默认2

    -XX:NewRatio :为老年代与新生代的大小比值,默认为2,即:-XX:OldSize/-XX:MaxNewSize=2

  • 非堆(方法区)元空间堆内存设置

    -XX:MetaspaceSize:表示元空间初始堆内存大小

    -XX:MaxMetaspaceSize:表示元空间最大堆内存大小

设置元空间初始大小和最大大小为256M,堆初始化大小和最大大小为4G,栈内存默认1M,新生代Eden和Survivor比例默认为8(此时未显示的默认值-XX:NewRatio=2,即:新生代 -XX:MaxNewSize =1/3 -XX:MaxHeapSize , -XX:OldSize=2/3 -XX:OldSize ) 这块的证明是堆内存=新生代堆内存+老年代堆内存 (物理上)

-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms4g -Xmx4g -Xss1m -XX:SurvivorRatio=8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值