zoukankan      html  css  js  c++  java
  • 实战JAVA虚拟机 JVM故障诊断与性能优化(三)

    常用java虚拟机参数

    一切运行都有迹可循,掌握跟踪调试参数

    1.跟踪垃圾回收--读懂虚拟机日志

      -XX:+PrintGC   打印gc日志

      -XX:+PrintGCDetails    虚拟机在退出时打印堆的详细信息

        eg:

    Heap

    PSYoungGen total 512K, used 0K [0x00000000fff00000, 0x0000000100000000, 0x0000000100000000)
    eden space 0K, -2147483648% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff00000)
    from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
    to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
    ParOldGen total 19456K, used 883K [0x00000000fec00000, 0x00000000fff00000, 0x00000000fff00000)
    object space 19456K, 4% used [0x00000000fec00000,0x00000000fecdce10,0x00000000fff00000)
    PSPermGen total 21504K, used 3001K [0x00000000f9a00000, 0x00000000faf00000, 0x00000000fec00000)
    object space 21504K, 13% used [0x00000000f9a00000,0x00000000f9cee640,0x00000000faf00000)

    [0x00000000fff00000, 0x0000000100000000, 0x0000000100000000)    3个16进制表示:下界,当前上界,上界

      

      -XX:+PrintHeapAtGC  打印全面的堆信息

      -XX:+PrintGCTimeStamps  打印GC的时间,为虚拟机启动时的偏移量

    2.类的加载/卸载的跟踪

      可以使用参数-verbose:class

      -XX:+TraceClassLoading  跟踪类的加载

      -XX:+TraceClassUnloading  跟踪类的卸载

    3.系统参数查看

      -XX:+PrintVMOptions  打印虚拟机接受到的命令行显示参数。

         eg: 控制台输出 

          VM option '+TraceClassLoading'
          VM option '+PrintVMOptions'

      -XX:+PrintCommandLineFlags  打印传递给虚拟机的显示和隐式参数,隐式参数包括:命令行、虚拟机自行启动的默认参数

        eg: 控制台输出

          -XX:InitialHeapSize=132318080 -XX:MaxHeapSize=2117089280 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation

          -XX:+UseParallelGC

    4.学习堆的配置参数

      -Xmx    最大可用内存

      -Xms    指定初始堆内存

      提示:在实际工作中,可以直接将初始堆-Xms和最大堆-Xmx设置相等。好处是可以减少程序运行时进行的垃圾回收次数。提高程序的性能。

      新生代的设置

        -Xmn  可以设置新生代的大小。设置一个较大的新生代会减少老年代的大小。这个参数对GC有很大影响

        -XX:SurvivorRatio  用来设置新生代中eden空间和form/to空间的比例关系。含义:  -XX:SurvivorRatio=eden/form=eden/to

        eg:

          -Xmx20m -Xms20m -Xmn7m -XX:PrintGCDetails -XX:SurvivorRatio=2

        -XX:NewRatio=老年代/新生代  来设置新生代与老年代的比例

    基本策略是:尽可能将对象保留在新生代,减少老年代的GC的次数,如果对象都分配在老年代,显然为后续的老年代GC埋下伏笔

    参数设置图

        

    堆溢出处理:

      Java程序运行过程中,如果堆内存不足,则有可能抛出内存溢出的错误(out of memory).简称OOM。

      当发生堆内存错误时,java虚拟机提供参数有:

      -XX:+HeapDumpOnOutOfMemoryError,使用此参数,可以在内存溢出时到处整个堆内存信息。配合使用的有-XX:HeapDumpPath,可以指出堆内存的存放路径

    了解非堆内存的参数配置

    方法区配置

      在jdk1.6,jdk1.7版本中,可以使用-XX:PermSize配置初始的永久区大小,-XX:MaxPermSize配置最大永久区

      在jdk1.8中,永久区被彻底删除,使用新的元数据区存放类的元数据,默认情况下,元数据区只受系统可用内存的限制。可以使用参数-XX:MaxMetaspaceSize指定永久区最大可用值,    

    栈配置

      -Xss  参数配置java栈大小

    直接内存配置

      -XX:MaxDirectMemorySize  设置最大可用直接内存,如不设置,默认值为最大堆空间,当直接内存使用量达到MaxDirectMemorySize值时,就会触发垃圾回收,如果不能有效释放足够空间,直接内存溢出依然会引起系统的OOM。

      注意:

        访问速度:直接内存>堆内存

        内存分配速度:直接内存<堆内存

    Client和Server二选一,虚拟机工作模式

      Client和Server模式下设置的参数可能不同,Server启动慢,因为Server模式会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化。

      

  • 相关阅读:
    JavaScript类属性
    JavaScript实现通过的集合类
    Asp.net mvc自定义Filter简单使用
    [转] js实现html table 行,列锁定
    学习笔记:HTML5 Canvas绘制简单图形
    学习笔记:Asp.Net MVC更新部分页面
    Dom随手记
    页面刷新或关闭前警告
    C# 创建WebServices及调用方法
    常用Web Service汇总(天气预报、时刻表等)
  • 原文地址:https://www.cnblogs.com/kaishi/p/7272364.html
Copyright © 2011-2022 走看看