美文网首页tomcat
tomcat-- OutOfMemoryError的反思一

tomcat-- OutOfMemoryError的反思一

作者: 宇晨棒棒的 | 来源:发表于2018-03-09 16:17 被阅读21次

    1.场景在线:
    jenkins构建成功,项目部署到tomcat中,但是页面访问竟然报404错误(但是项目确实存在于项目中),查看tomcat日志,发现出现了OutOfMemoryError报错,由于项目比较紧,就重启了tomcat,页面恢复了正常

    2.查找关于造成这个问题的原因:OutOfMemoryError

    3.关于java的内存jvm重新认识:
    1) java内存可以分为堆内存和非堆内存
    堆是给开发人员用的,是在JVM启动时创建;
    非堆是留给JVM自己用的,用来存放类型(类和接口)的信息。
    两个的区别:它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者 tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多,热部署上几次就java.lang.OutOfMemoryError: PermGen space .
    2)内存设置信息:
    ---- 堆内存设置:程序可以到达的,可以操作的
    -Xms 初始堆内存 默认物理内存1/64,也是最小分配堆内存,当空余堆内存小于40%时,会增加到-Xms的最大限制
    -Xmx 最大堆内存分配 默认物理内存1/4,当空余堆内存大于70%时,会减小到-Xms的最小限制。
    一般设置 -Xms和Xms大小相等
    设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4

    ---- 非堆内存设置
    -XX:PermSize 非堆内存的初始值,默认物理内存的1/64 ,也是最小非堆内存。
    -XX:MaxPermSize 非堆内存最大值,默认物理内存的1/4
    -XX:MaxNewSize tomcat对自身堆栈的新的最大的分配;当tomcat内存不足时,调用此分配;从而达到调优的目的
    -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

    3)经典JVM参数设置:
    java -Xmx128m -Xms128m -Xmn64m -Xss1m

    4)tomcat中在linux中jvm的设置:
    ----------------------Linux下修改TomcatJVM内存大小----------------------

    要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.

    OS specific support. $var must be set to either true or false.

    JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
    cygwin=false

    ----------------------windows下修改Tomcat JVM内存大小----------------------

    解压版本的Tomcat , 要通过startup.bat启动tomcat才能加载配置

    要添加在tomcat 的bin 下catalina.bat 里

    rem Guess CATALINA_HOME if not defined
    set CURRENT_DIR=%cd%后面添加,红色的为新添加的.

    set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

    相关文章

      网友评论

        本文标题:tomcat-- OutOfMemoryError的反思一

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