问题:
最近做项目碰到了让我纠结的问题,tomcat服务器运行一段时间,总是会自动报异常:java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行。
介绍:
PermGen Space:指的是内存的永久保存区,该块内存主要是被JVM用来存放 class 和 mete 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,与存放类的实例的heap区不同,java中的 垃圾回收器GC 不会在主程序运行期对 PermGen space 进行清理。
原因:
- 当我们的应用中有很多的class时,很可能就会出现PermGen space的错误。
- 我们的 tomcat 在重启的时候,不是使用的 ./bin/shutdown.sh 而是使用 kill -9 xxx 直接杀掉,这样的话,存在 PermGen space 里面的内存不会被释放的,这样多长进行 kill 之后,就会导致系统的内存被渐渐吃完了,直到最后 tomcat 报错。
解决方法:
- 手动设置MaxPermSize的大小
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 在关闭重启 tomcat 的过程中使用 shutdown.sh 而不是 使用 kill -9
- 如果使用 shutdown.sh 不能将 tomcat 关掉的话,就必须要使用 kill -9 来关闭了,这个时候只有手动的来回收垃圾了: 在 linux 命令下执行如下的命令,把 缓存给丢弃掉。
Tomcat PermGenSpace 错误解决

本文介绍了解决Tomcat服务器运行过程中出现的java.lang.OutOfMemoryError:PermGenSpace错误的方法。PermGenSpace是JVM用于存放Class和Meta信息的区域,错误通常由频繁加载大量Class而未正确释放内存导致。文章提供了调整PermGenSpace大小的具体步骤,并建议使用shutdown.sh脚本代替kill命令来避免此类问题。
866

被折叠的 条评论
为什么被折叠?



