tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space
Posted 小向光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space相关的知识,希望对你有一定的参考价值。
部署应用服务到tomcat下,可能会抛出内存溢出异常,如下:
Exception in thread "Timer-1" java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
内存不足 (OutOfMemory) - 由于java 堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。
Java 堆 - 这是 JVM 用来分配 java 对象的内存。
如果JVM不能在java堆中获得更多内存来分配更多java对象,将会抛出java内存不足(java.lang.OutOfMemoryError)错误。默认情况下,应用程序崩溃。
本地内存 - 这是 JVM 用于其内部操作的内存。
如果 JVM 无法获得更多本地内存,它将抛出本地内存不足(本地 OutOfMemoryError)错误。当进程到达操作系统的进程大小限值,或者当计算机用完 RAM 和交换空间时,通常会发生这种情况。
进程大小 - 进程大小将是 java 堆、本地内存与加载的可执行文件和库所占用内存的总和。在 32 位操作系统上,进程的虚拟地址空间最大可达到 4 GB。从这 4 GB 内存中,操作系统内核为自己保留一部分内存(通常为 1 - 2 GB)。剩余内存可用于应用程序。
java虚拟机是遵照有关规范的一个软件实现,存在于内存中。jvm是由安装于机器上的jre(java运行环境)生成的。通常来说,每次运行一个application都会生成一个jvm,但是也可以有多个程序在同一个jvm里面。
可以使用命令java -X查看非标准(non-standard)的程序运行选项,以下3个是我所关心的:
-Xms set initial Java heap size
-Xmx set maximum Java heap size
-Xss set java thread stack size
-Xmx设置应用程序(不是jvm)能够使用的最大内存数,这个值也不应该设置过大,超过机器内存。
例如:java -Xmx50M testMemory
-Xms设置程序初始化的时候内存栈的大小。有时可以用于改变程序运行的效率。
例如使用以下方式运行一个占用20M左右内存的程序testMemory: java -Xms50M testMemory
为了解决tomcat在大进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:
一、使用 catalina.bat 等命令行方式运行的 tomcat
windows环境下, 修改 tomcat\\bin\\Catalina.bat 文件 , 在文件开头可增加如下设置:
set JAVA_OPTS=-Xms256m -Xmx512m
二、修改eclipse的tomcat插件配置
window–》show view –》server
双击上图 的Open launch configuration进入
最后在Arguments的VM arguments顶行加上
-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M
以上是关于tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space的主要内容,如果未能解决你的问题,请参考以下文章
tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space
大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决