当前位置:首页 > 操作系统 > Linux

Linux下Tomcat VM参数修改

不可行的方法

最初我直接修改catalina.sh, 将JAVA_OPTS变量加上了

            
                -server
                -Xms1G
                -Xmx1G
                -XX:+UserG1GC
        

最初看起来没啥问题,但是当服务器运行几天后,发现执行shutdown.sh无法关闭tomcat, 错误信息如下:

            
                # root@iZ94hjppdqzZ:~/projects/taolijie# cat hs_err_pid5519.log 
                # There is insufficient memory for the Java Runtime Environment to continue.
                # Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
                # Possible reasons:
                #   The system is out of physical RAM or swap space
                #   In 32 bit mode, the process size limit was hit
                # Possible solutions:
                #   Reduce memory load on the system
                #   Increase physical memory or swap space
                #   Check if swap backing store is full
                #   Use 64 bit Java on a 64 bit OS
                #   Decrease Java heap size (-Xmx/-Xms)
                #   Decrease number of Java threads
                #   Decrease Java thread stack sizes (-Xss)
                #   Set larger code cache with -XX:ReservedCodeCacheSize=
                # This output file may be truncated or incomplete.
                #
                #  Out of Memory Error (os_linux.cpp:2673), pid=5519, tid=3061726064
                #
                # JRE version:  (8.0_45-b14) (build )
                # Java VM: Java HotSpot(TM) Server VM (25.45-b02 mixed mode linux-x86 )
                # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
                #
            
        

关闭个tomcat要请求1G的内存, 当时服务器就剩下200M内存,所以Out Of Memory了。查看shutdown.sh,发现它其实还是调用了catalina.sh,只是传入了一个stop参数。而catalina.sh是执行了

            org.apache.catalina.startup.Bootstrap stop
        

来向tomcat发送关闭信息的。由于上面我们设置了JAVA_OPTS使用1G的堆,因此执行该类时JVM会向系统申请1G多的内存,直接导致Out Of Memory。

可行的方法

catalina.sh的第二行添加:

            CATALINA_OPTS="$CATALINA_OPTS -server -Xms1G -Xmx1G -XX:+UseG1GC"
        

这些VM参数就会只应用到catalina而不是所有Tomcat进程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://blog.csdn.net/neosmith/article/details/47083077


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐