zoukankan      html  css  js  c++  java
  • JVM参数及性能调优

    1、JVM参数

      分为标准参数和非标准参数。标准参数如:-version,-help。非标准参数有-X和-XX,其中-XX使用最多,主要用于JVM调优和Debug。

      * Boolean类型,格式:-XX:[+-]<name>,+或-表示启用或禁用name属性。

        如:-XX:+UseG1GC  表示启用G1垃圾收集器

      * 非Boolean类型,格式:-XX<name>=<value> ,表示name属性的值是value。

        如:-XX:MaxGCPauseMillis=500  表示GC停顿最大时间为500毫秒

      还有一些参数简写:

          ——  -Xms1000等价于-XX:InitialHeapSize=1000

          ——  -Xmx1000等价于-XX:MaxHeapSize=1000

          ——  -Xss100等价于-XX:ThreadStackSize=100

      查看参数可以用:java  -XX:+PrintFlagsFinal  -version > flags.txt,导入到文件再查看。

    2、常用命令     

    (1)jps,查看进程

        

     (2)jinfo,实时查看和调整JVM配置参数

      *  查看:jinfo  -flag  name  PID,查看某个Java进程的name属性的值

        

      *  修改:jinfo  -flag  [+-]<name>  PID  或  jinfo  -flag  <name>=<value>  PID

        只有被标记为manageable的参数可以被实时修改

    (3)jstat,查看虚拟机性能统计信息

      *  查看类装载信息

        jstat  -class  PID  1000  10,查看某个Java进程的类装载信息,每1000毫秒输出一次,输出10次。

      *  查看垃圾收集信息

        jstat  -gc  PID  1000  10,查看某个Java进程的GC信息。

    (4)jstack,查看线程堆栈信息

      jstack  PID,查看进程中线程的状态。

        

     (5)jmap,生成堆转储快照

      *  jmap  -heap  PID,打印出堆内存相关信息

        

       *  jmap  -dump:format=b,file=heap.hprof  PID,dump出堆内存相关信息,对于dump出的文件,可以结合工具来分析。

       在开发中,可以添加如下参数,当发生堆内存溢出的时候,会自动dump出该文件。

          -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=heap.hprof

    3、常用工具

    (1)jconsole

      JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等。

    (2)jvisualvm

      可以监控本地或远程的Java进程,查看进程中的CPU、类、线程等。

    (3)Arthas

      alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。

    (4)MAT

      Java堆分析器,用于查找内存泄漏。

    4、GC日志分析

      要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下:

        -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:+PrintGCDateStamps  -Xloggc:gc.log

      分析工具:

        *  在线:http://gceasy.io

        *  GCViewer

    5、Java排查性能问题的参数

        ①top:实时显示各个进程的CPU占用率、内存使用率等资源占用情况。

        ②top -Hp pid:查看具体线程的CPU占用率。

        ③vmstat:可以指定采样周期和次数的监测工具,可以用来查看上下文切换次数

        ④jstat:查看堆内存信息和GC信息。jstat -gc显示GC相关的堆信息、jstat -gcutil显示GC信息。它会打印各个元区使用量和GC次数。

        ⑤jstack:查看线程的堆栈信息。

        ⑥jmap:输出堆内存的对象信息

      简单案例:
    (1)CPU 100%处理过程:

      ①通过top命令找到占用CPU最高的进程pid

      ②通过top -Hp pid找到进程中占用CPU过高的线程tid

      ③通过jstack pid | grep tid {-A 30} 得到线程堆栈信息,根据堆栈信息就可以定位到项目中的问题了。

    (2)排查OOM内存溢出:

      ①配置JVM启动参数-XX:HeapDumpOnOutOfMemoryError与-XX:HeapDumpPath,JVM发生OOM时就会自动生成dump日志

      ②使用 jmap -dump:format=b , file=D: estheap.hprof 6956导出dump日志(进程号:netstat -ano | find “8080” 查看当前应用程序使用的进程号。)

      ③可以使用JDK自带的jvisualvm导入dump快照,进行查看。

  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/jing-yi/p/12753235.html
Copyright © 2011-2022 走看看