网站以前经常java.lang.OutOfMemoryError,也没仔细去查看到底是哪里出了问题,昨晚又出现这个问题
了,今天就仔细查找了下资料,在这里总结下,如有不正确的地方,非常欢迎各位指出。
以前对java.lang.OutOfMemoryError的概念,只局限于jvm内存溢出了,
今天才发现java.lang.OutOfMemoryError 出现时,有多种情况,比如:PermGen space ,Java heap space 。
我现在遇到的是java.lang.OutOfMemoryError: PermGen space ,查了下资料,一般的说法是内存的永久保
存区域溢出了,永久保存区域是存放class信息和meta信息
的,分配了后,jvm是不会去回收的。必须让jvm分配更多的permsize,才能解决这个问题。
问题来了,我的应用这个permsize一般占用多少呢? 我该在catalina.sh或catalina.bat里面给这个值设置多少呢?
有人说用jconsole或其他内存监控程序来查看这些数据,但是我不想这么麻烦,要配置参数,监听端口什么的,因为在
Qieqie的一个回帖里面,他提到可以用命令查看permsize的占用情况(
http://www.iteye.com/topic/80620#289390)
所以我倾向于用一条简单的命令就可以知道permsize的占用情况,结果这方面的命令还真不少,jstat就是其中之一,
我使用的命令是: jstat -gcpermcapacity pid ,pid是进程的编号,关于jstat的使用说明可以查看 sun的网站:
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
jstat输出的数据都是以kb为单位的。在我的应用中,permsize占用情况
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
16384.0 65536.0 65536.0 65536.0 132 3 1.866 2.977
所以我决定把PermSize设为128M, MaxPermSize设为256M。
应用在linux服务器上,所以设置catalina.sh如下:
JAVA_OPTS='-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m '
请大家多多指教。
分享到:
相关推荐
启动JConsole后,选择目标进程并查看内存页面下的“Perm Gen”部分,可以直观地看到当前PermGen space的使用情况,从而判断设置是否生效。 4. **优化代码**: - 减少不必要的类加载和字符串常量池的使用。例如,...
这意味着即使不再使用的类也会占用PermGen space的空间。 3. **动态代理或注解处理**:在使用诸如Spring AOP这样的框架时,会生成大量的代理类,这些代理类也会消耗PermGen space的空间。 4. **配置不当**:默认情况...
4. **监控和分析**:使用性能监控工具定期检查PermGen Space的使用情况,以便及时发现问题并进行调整。 #### Heap Space与PermGen Space的区别及调整 Heap Space是指JVM用来存储对象实例的内存区域,包括年轻代...
总之,"java.lang.OutOfMemoryError: PermGen space"错误是由于Java虚拟机的 PermGen 区域内存不足造成的,可以通过增大 PermGen 区域的大小、升级JVM版本、优化类加载和库的使用等方式来解决。对于任何内存管理问题...
- `-XX:PermSize` 参数用于设置JVM初始的非堆内存(即PermGen空间)大小,如 `-XX:PermSize=64M` 指定 PermGen 初始分配64MB。 - `-XX:MaxPermSize` 参数则是设定 PermGen 空间的最大值,如 `-XX:MaxPermSize=128M` ...
GC(Garbage Collection)不会在主程序运行期对 PermGen space 进行清理,这意味着如果应用程序加载了很多 Class,那么 PermGen space 就可能会溢出,导致 OutOfMemoryError。 解决 PermGen space 问题的方法: 1....
* -XX:MaxPermSize=256m:设置 PermGen space 的最大大小为 256M 通过添加这些参数,可以增加 JVM 的内存空间,避免 PermGen space 溢出,解决 java.lang.OutOfMemoryError: PermGen space 异常。 在实际应用中,...
### OutOfMemoryError: PermGen space 错误详解与解决方案 #### 一、问题背景及症状 在开发或运行基于Java的应用程序时,有时会遇到一个常见的错误提示:“OutOfMemoryError: PermGen space”。该错误通常发生在...
java.lang.OutOfMemoryError: PermGen space 解决方案
Java JVM 虚拟机选项 Xms Xmx ...如果 MaxPermSize 设置过小,可能会导致 java.lang.OutOfMemoryError: PermGen space。 因此,合理地配置 JVM 的内存参数是非常重要的,可以避免内存溢出错误和提高应用的性能。
讲述了PermGen space错误解决方法以及PermGen space的出现的几张情况
- **减少第三方Jar包的数量和大小**:尽可能减少项目中第三方Jar包的数量,并尽量选择轻量级的库,以降低PermGen Space的占用。 - **启用字符串池的共享**:通过使用`String.intern()`方法可以有效地减少字符串在...
当应用程序加载的类数量过多或者类的元数据占用空间过大时,就会导致PermGen space错误。 Java程序的运行机制与传统的C++或C程序不同。Java源代码首先被编译为平台无关的字节码(Bytecode),这些字节码可以在任何...
在Tomcat的配置文件中(如`catalina.bat`或`catalina.sh`),可以通过添加`-XX:PermSize`和`-XX:MaxPermSize`参数来设定 PermGen 的初始大小和最大大小,例如设置为`-XX:PermSize=128M`和`-XX:MaxPermSize=512m`。...
而Tomcat的启动脚本`catalina.bat`中设置的`JAVA_OPTS`则是针对Tomcat服务器的内存配置,这两者并不冲突,因为MyEclipse集成的Tomcat使用的是独立的JVM配置。 了解Java内存模型对于理解上述设置至关重要。Java内存...
* 设置 PermSize 和 MaxPermSize:可以使用 JVM 选项 -XX:PermSize 和 -XX:MaxPermSize 来设置 PermGen space 的大小。 * 减少Class数量:在应用中尽量减少Class的数量,避免使用大量的第三方 jar 文件。 * 使用 ...
PermGen space,全称为Permanent Generation space,是早期Java HotSpot虚拟机中的一个内存区域,主要用来存放类和元数据。然而,这个区域经常因为类加载器的内存泄漏或频繁的类加载而导致`java.lang....