zoukankan      html  css  js  c++  java
  • JVM参数配置

    新生代配置

    新生代大小配置参数的优先级:

    高:-XX:NewSize/MaxNewSize

    中间 -Xmn NewSize= MaxNewSize

    低:-XX:NewRatio  表示比例,例如=2,表示 新生代:老年代 = 1:2

    -XX:SurvivorRatio 表示EdenSurvivor的比值,

    缺省为8 表示 Eden:FromSurvivor:ToSurvivor= 8:1:1

    同样的代码情况下:

    -Xms20M -Xmx20M -XX:+PrintGCDetails –Xmn2m -XX:SurvivorRatio=2

    没有垃圾回收

    数组都在老年代

    -Xms20M -Xmx20M -XX:+PrintGCDetails -Xmn7m -XX:SurvivorRatio=2

    发生了垃圾回收

    新生代存了部分数组,老年代也保存了部分数组,发生了晋升现象

    -Xms20M -Xmx20M -XX:+PrintGCDetails -Xmn15m -XX:SurvivorRatio=8

    新生代可以放下所有的数组

    老年代没放

    -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:NewRatio=2

    发生了垃圾回收

    出现了空间分配担保,而且发生了FullGC

    JDK为我们提供的工具

    jps

    列出当前机器上正在运行的虚拟机进程

    -p  :仅仅显示VM 标示,不显示jar,class, main参数等信息.

    -m:输出主函数传入的参数. 下的hello 就是在执行程序时从命令行输入的参数

    -l: 输出应用程序主类完整package名称或jar完整名称.

    -v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数

     

    jstat

    是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。

    假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:jstat-gc 2764 250 20

    常用参数:

    -class (类加载器)

    -compiler (JIT)

    -gc (GC堆状态)

    -gccapacity (各区大小)

    -gccause (最近一次GC统计和原因)

    -gcnew (新区统计)

    -gcnewcapacity (新区大小)

    -gcold (老区统计)

    -gcoldcapacity (老区大小)

    -gcpermcapacity (永久区大小)

    -gcutil (GC统计汇总)

    -printcompilation (HotSpot编译统计)

     

    jinfo

    查看和修改虚拟机的参数

    jinfo sysprops 可以查看由System.getProperties()取得的参数

    jinfo flag 未被显式指定的参数的系统默认值

    jinfo flags(注意s)显示虚拟机的参数

    jinfo flag +[参数] 可以增加参数,但是仅限于由java -XX:+PrintFlagsFinal –version查询出来且

    manageable的参数

    jinfo flag -[参数] 可以去除参数

    Thread.getAllStackTraces();

     

    jmap

    用于生成堆转储快照(一般称为heapdumpdump文件)。jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。和jinfo命令一样,jmap有不少功能在Windows平台下都是受限的,除了生成dump文件的-dump选项和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统都提供之外,其余选项都只能在Linux/Solaris下使用。

    jmap -dump:live,format=b,file=heap.bin <pid>

    Sun JDK提供jhatJVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。

    jhat

    jhat dump文件名

    后屏幕显示Server is ready.”的提示后,用户在浏览器中键入http://localhost7000/就可以访问详情

    jstack

    Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。

    在代码中可以java.lang.Thread类的getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象。使用这个方法可以通过简单的几行代码就完成jstack的大部分功能,在实际项目中不妨调用这个方法做个管理员页面,可以随时使用浏览器来查看线程堆栈。

     

    管理远程进程需要在远程程序的启动参数中增加:

    -Djava.rmi.server.hostname=..

    -Dcom.sun.management.jmxremote

    -Dcom.sun.management.jmxremote.port=8888

    -Dcom.sun.management.jmxremote.authenticate=false

    -Dcom.sun.management.jmxremote.ssl=false

     

    visualvm

    插件中心地址

    https://visualvm.github.io

    但是注意版本问题,不同的JDK所带的visualvm是不一样的,下载插件时需要下对应的版本。

     

    以下为使用例子:

    查看当前进程所有的参数

    C:Userszhouf>jinfo -flags 17028

    Attaching to process ID 17028, please wait...

    Debugger attached successfully.

    Server compiler detected.

    JVM version is 25.192-b12

    Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=2097152 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=2097152 -XX:OldSize=18874368 -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

    Command line:  -Xms20m -Xmx20m -Xmn2m -XX:+PrintGC -Dfile.encoding=GBK

     

     

    jinfo修改jvm参数

    C:Userszhouf>jinfo -flag PrintGCDetails 17028

    -XX:-PrintGCDetails

    C:Userszhouf>jinfo -flag +PrintGCDetails 17028

    C:Userszhouf>jinfo -flag PrintGCDetails 17028

    -XX:+PrintGCDetails

     

    查看可修改的参数

    C:Userszhouf>java -XX:+PrintFlagsFinal -version

    注:显示manageable的参数可以修改

    [Global flags]

         intx ActiveProcessorCount                      = -1                                  {product}

        uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}

        uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}

        uintx AdaptiveSizePausePolicy                   = 0                                   {product}

        uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}

        uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}

        uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}

         intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}

        uintx CMSBitMapYieldQuantum                     = 10485760                            {product}

        uintx CMSBootstrapOccupancy                     = 50                                  {product}

         bool CMSClassUnloadingEnabled                  = true                                {product}

     

    jmap

     

     

    C:Userszhouf>jmap -dump:live,format=b,file=heap.bin 17028

    Dumping heap to C:Userszhoufheap.bin ...

    Heap dump file created

     

    C:Userszhouf>jhat C:Userszhoufheap.bin

    Reading from C:Userszhoufheap.bin...

    Dump file created Thu Feb 13 10:22:07 CST 2020

    Snapshot read, resolving...

    Resolving 7088 objects...

    Chasing references, expect 1 dots.

    Eliminating duplicate references.

    Snapshot resolved.

    Started HTTP server on port 7000

    Server is ready.

     

    查看日志文件

     

    http://localhost:7000/

     

    JDK为我们提供的工具

    jps

    列出当前机器上正在运行的虚拟机进程

    -p  :仅仅显示VM 标示,不显示jar,class, main参数等信息.

    -m:输出主函数传入的参数. 下的hello 就是在执行程序时从命令行输入的参数

    -l: 输出应用程序主类完整package名称或jar完整名称.

    -v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数

     

    jstat

    是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。

    假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:jstat-gc 2764 250 20

    常用参数:

    -class (类加载器)

    -compiler (JIT)

    -gc (GC堆状态)

    -gccapacity (各区大小)

    -gccause (最近一次GC统计和原因)

    -gcnew (新区统计)

    -gcnewcapacity (新区大小)

    -gcold (老区统计)

    -gcoldcapacity (老区大小)

    -gcpermcapacity (永久区大小)

    -gcutil (GC统计汇总)

    -printcompilation (HotSpot编译统计)

     

    jinfo

    查看和修改虚拟机的参数

    jinfo sysprops 可以查看由System.getProperties()取得的参数

    jinfo flag 未被显式指定的参数的系统默认值

    jinfo flags(注意s)显示虚拟机的参数

    jinfo flag +[参数] 可以增加参数,但是仅限于由java -XX:+PrintFlagsFinal –version查询出来且

    manageable的参数

    jinfo flag -[参数] 可以去除参数

    Thread.getAllStackTraces();

     

    jmap

    用于生成堆转储快照(一般称为heapdumpdump文件)。jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。和jinfo命令一样,jmap有不少功能在Windows平台下都是受限的,除了生成dump文件的-dump选项和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统都提供之外,其余选项都只能在Linux/Solaris下使用。

    jmap -dump:live,format=b,file=heap.bin <pid>

    Sun JDK提供jhatJVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。

    jhat

    jhat dump文件名

    后屏幕显示Server is ready.”的提示后,用户在浏览器中键入http://localhost7000/就可以访问详情

    jstack

    Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。

    在代码中可以java.lang.Thread类的getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象。使用这个方法可以通过简单的几行代码就完成jstack的大部分功能,在实际项目中不妨调用这个方法做个管理员页面,可以随时使用浏览器来查看线程堆栈。

     

    管理远程进程需要在远程程序的启动参数中增加:

    -Djava.rmi.server.hostname=..

    -Dcom.sun.management.jmxremote

    -Dcom.sun.management.jmxremote.port=8888

    -Dcom.sun.management.jmxremote.authenticate=false

    -Dcom.sun.management.jmxremote.ssl=false

     

    visualvm

    插件中心地址

    https://visualvm.github.io

    但是注意版本问题,不同的JDK所带的visualvm是不一样的,下载插件时需要下对应的版本。

  • 相关阅读:
    leetcode-Single Number
    设计模式六大原则(4)——接口隔离原则
    设计模式六大原则(3)——依赖倒置原则
    设计模式六大原则(2)——里氏替换原则
    设计模式六大原则(1)——单一职责原则
    观察者模式
    转:画图工具
    android 博客列表
    app crash率的标准
    查看某一个开发者代码修改量的脚本(ios平台可用)
  • 原文地址:https://www.cnblogs.com/zhoufly-blog/p/12304732.html
Copyright © 2011-2022 走看看