服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

巧解Tomcat中JVM内存溢出问题


发布日期:2022年01月22日
 
巧解Tomcat中JVM内存溢出问题

你对Tomcat 的JVM内存溢出问题的解决方法是否了解这里和大家分享一下相信本文介绍一定会让你有所收获

tomcat 的JVM内存溢出问题的解决

最近在熟悉一个开发了有几年的项目需要把数据库从mysql移植到oracle首先把jdbc的连接指向mysql打包放到tomcat里面可以跑起来没有问题可是当把jdbc连接指向oracle的时候tomcat就连续抛javalangOutOfMemoryError的错误上网google了一下了解了一下tomcat的运行机制也解决了问题share出来以备查下面有几种JVM内存溢出的现象和解决方法请看详细介绍

JVM内存溢出现象提示一javalangOutOfMemoryError:Javaheapspace

解释

Heapsize设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置JVM在启动的时候会自动设置Heapsize的值其初始空间(即Xms)是物理内存的/最大空间(Xmx)是物理内存的/可以利用JVM提供的XmnXmsXmx等选项可进行设置Heapsize的大小是YoungGeneration和TenuredGeneraion之和

提示在JVM中如果%的时间是用于GC且可用的Heapsize不足%的时候将抛出此异常信息

提示HeapSize最大不要超过可用物理内存的%一般的要将Xms和Xmx选项设置为相同Xmn为/Xmx值

解决方法

手动设置Heapsize

修改TOMCAT_HOME/bin/catalinabatechoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行

Java代码

    setJAVA_OPTS=%JAVA_OPTS%server

    XmsmXmxmXX:MaxNewSize=m

    setJAVA_OPTS=%JAVA_OPTS%server

    XmsmXmxmXX:MaxNewSize=m

或修改catalinash

echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行

    JAVA_OPTS=$JAVA_OPTSserverXmsm

    XmxmXX:MaxNewSize=m

JVM内存溢出现象提示二javalangOutOfMemoryError:PermGenspace

原因

PermGenspace的全称是PermanentGenerationspace是指内存的永久保存区域这块内存主要是被JVM存放Class和Meta信息的Class在被Loader时就会被放到PermGenspace中它和存放类实例(Instance)的Heap区域不同GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理所以如果你的应用中有很CLASS的话就很可能出现PermGenspace错误这种错误常见在web服务器对JSP进行precompile的时候如果你的WEBAPP下都用了大量的第三方jar其大小超过了jvm默认的大小(M)那么就会产生此错误信息了

解决方法

手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalinabat(Linux下为catalinash)在Java代码

echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行

    setJAVA_OPTS=%JAVA_OPTS%server

    XX:PermSize=MXX:MaxPermSize=m

echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行

    setJAVA_OPTS=%JAVA_OPTS%server

    XX:PermSize=MXX:MaxPermSize=m

catalinash下为

Java代码

    JAVA_OPTS=$JAVA_OPTSserver

    XX:PermSize=MXX:MaxPermSize=m

    JAVA_OPTS=$JAVA_OPTSserver

    XX:PermSize=MXX:MaxPermSize=m

上一篇:一个Java 的 Socket 服务器和客户端通信的例子

下一篇:用Socket类实现HTTP协议客户端应用