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快照,进行查看。

  • 相关阅读:
    LAMP
    监控和安全运维 1.8 zabbix服务端安装
    监控和安全运维 1.7 nagios配置邮件告警
    易道用车-拿什么说爱你
    unix exec族函数 关于参数的疑惑
    关于 Unix 用户权限及进程权限及 Saved set-user-id
    ANSI C中关于FILE流的一些
    Filco minila 的蛋疼。
    IIS32位,64位模式下切换
    Gvim+Emmet.vim 那些事。
  • 原文地址:https://www.cnblogs.com/jing-yi/p/12753235.html
Copyright © 2011-2022 走看看