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模式会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化。

      

  • 相关阅读:
    [翻译]9个最好的富文本编辑器概览
    使用 AForm 快速开发高度复用的表单
    sql server和oracle行转列的一种典型方法
    hibernate4 分页报只进结果集不支持请求的操作的解决办法
    android主流UI布局
    Android 4.0源码放出
    The SQL Server Service Broker for the current database is not enabled
    iphone网络编程 http请求 get / post(发送二进制文件) 总结
    VS2008编译命令
    如何使用SOCKET 发送HTTP1.1 GET POST请求包
  • 原文地址:https://www.cnblogs.com/kaishi/p/7272364.html
Copyright © 2011-2022 走看看