美文网首页
Java OOM 解决方法

Java OOM 解决方法

作者: GambitP_P | 来源:发表于2018-06-20 11:32 被阅读0次

    报错现象

    Java 程序出现异常 java.lang.OutOfMemoryError: Java heap space

    报错原因

    在 JVM 中如果 98% 的时间是用于 GC 且可用的 Heap Size 不足 2% 的时候将抛出此异常信息。

    Heap Size 默认配置

    JVM 堆的设置是指 Java 程序运行过程中 JVM 可以调配使用的内存空间的设置,JVM在启动的时候会自动设置Heap Size的值。
    -Xms 堆内存的最小大小,默认为物理内存的1/64
    -Xmx 堆内存的最大大小,默认为物理内存的1/4
    -Xmn 堆内新生代的大小,通过这个值也可以得到老生代的大小:-Xmx减-Xmn

    Heap Size 设置注意

    Heap Size 设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了,GC 占用了更多的时间,而应用分配到的执行时间较少。
    Heap Size 最大不要超过可用物理内存的80%,一般的要将 -Xms 和 -Xmx 选项设置为相同,而 -Xmn 为1/4的 -Xmx 值。
    Heap Size 的 -Xms -Xmn 设置不要超出物理内存的大小,否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。

    解决方法

    这个问题的根源是 JVM 虚拟机的默认 Heap 大小是64M,可以通过设置其最大和最小值来实现

    方法1: 如果使用jar包

    java -jar -Xms64m -Xmx128m MyApp.jar
    

    方法2:如果使用tomcat
    Windows下,加在 ..\tomcat\bin\catalina.bat 文件中

    rem Guess CATALINA_HOME if not defined
    
    set JAVA_OPTS=-Xms64m -Xmx256m #加在这里
    

    Linux系统,加在 ../tomcat/bin/catalina.sh 文件中

    #   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
    #                   Example (all one line)
    #                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
    # -----------------------------------------------------------------------------
    
     set JAVA_OPTS='-Xms64 -Xmx512' #加在这里
    
    # OS specific support.  $var _must_ be set to either true or false.
    

    相关文章

      网友评论

          本文标题:Java OOM 解决方法

          本文链接:https://www.haomeiwen.com/subject/pmwtyftx.html