java 中PermGen space解决方案

PermGen space 的全称是 Permanent Generation space, 是指内存的永久保存区域 OutOfMemoryError: PermGen space 从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放 Class 和 Meta 的信息 ,Class 在被 Load 的时候被放入 PermGen space 区域,它和和存放 Instance 的 Heap 区域不同 ,GC(Garbage Collection) 不会在主程序运行期对 PermGen space 进行清理,所以如果你的 APP 会 LOAD 很多 CLASS 的话 , 就很可能出现 PermGen space 错误。这种错误常见在 web 服务器对 JSP 进行 pre compile 的时候。 如果你的 WEB APP 下都用了大量的第三方 jar, 其大小 超过了 jvm 默认的大小 (4M) 那么就会产生此错误信息了。
解决方法: 手动设置 MaxPermSize 大小
改正方法: -Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

 

修改 TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下,这样可以达到减少 jar 文档重复占用内存的目的。

Sun 文档是这样解释的:

java.lang.OutOfMemoryError: PermGen space

The detail message PermGen space indicates that the permanent generation is full. The permanent generation is the area of the heap where class and method objects are stored. If an application loads a very large number of classes, then the size of the permanent generation might need to be increased using the -XX:MaxPermSize option.

Interned java.lang.String objects are also stored in the permanent generation. The java.lang.String class maintains a pool of strings. When the intern method is invoked, the method checks the pool to see if an equal string is already in the pool. If there is, then the intern method returns it; otherwise it adds the string to the pool. In more precise terms, the java.lang.String.intern method is used to obtain the canonical representation of the string; the result is a reference to the same class instance that would be returned if that string appeared as a literal. If an application interns a huge number of strings, the permanent generation might need to be increased from its default setting.

When this kind of error occurs, the text String.intern or ClassLoader.defineClass might appear near the top of the stack trace that is printed.

The jmap -permgen command prints statistics for the objects in the permanent generation, including information about internalized String instances. See 2.6.4 Getting Information on the Permanent Generation .

下面是某人遇到的问题:

SUN JDK+Tomcat 5.5.20 运行服务的时候遇到问题,服务器跑几天后就会挂掉,并报java.lang.OutOfMemoryError: PermGen space 异常。

发现很多人把问题归因于: spring,hibernate,tomcat ,因为他们动态产生类, 导致JVM 中的permanent heap 溢出 。然后解决方法众说纷纭,有人说升级 tomcat 版本到最新甚至干脆不用tomcat 。还有人怀疑spring 的问题,在spring论坛 上讨论很激烈,因为spring 在AOP 时使用CBLIB 会动态产生很多类。

但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat 在Q&A 很隐晦的回答了这一点。(Why does the memory usage increase when I redeploy a web application? Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads another copy of all these classes. This can cause OufOfMemoryErrors eventually. )

于是有人对更基础的JVM 做了检查 ,发现了问题的关键。原来SUN 的JVM 把内存分了不同的区,其中一个就是permanent 区用来存放用得非常多的类和类描述。本来SUN 设计的时候认为这个区域在JVM 启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc 根本没办法回收!

对这个 bug 最彻底的解决办法就是不要用 SUN 的 JDK ,而改用 BEA的 JRokit.

 

在 tomcat 中 redeploy 时出现 outofmemory 的错误 .

可以有以下几个方面的原因 :

1 , 使用了 proxool, 因为 proxool 内部包含了一个老版本的 cglib.

2, log4j,
最好不用 , 只用 common-logging

3,
老版本的 cglib, 快点更新到最新版。

4,更新到最新的 hibernate3.2
3
、 这里以 tomcat 环境为例,其它 WEB 服务器如 jboss,weblogic 等是同一个道理。

 

二、 java.lang.OutOfMemoryError: Java heap space
Heap size
设置
JVM
堆的设置是指 java 程序运行过程中 JVM 可以调配使用的内存空间的设置 .JVM 在启动的时候会自动设置 Heap size 的值,
其初始空间 ( 即 -Xms) 是物理内存的 1/64 ,最大空间 (-Xmx) 是物理内存的 1/4 。可以利用 JVM 提供的 -Xmn -Xms -Xmx 等选项可
进行设置。 Heap size 的大小是 Young Generation 和 Tenured Generaion 之和。
提示:在 JVM 中如果 98 %的时间是用于 GC 且可用的 Heap size 不足 2 %的时候将抛出此异常信息。
提示: Heap Size 最大不要超过可用物理内存的 80 %,一般的要将 -Xms 和 -Xmx 选项设置为相同,而 -Xmn 为 1/4 的 -Xmx 值。
解决方法:手动设置 Heap size
修改 TOMCAT_HOME/bin/catalina.sh
在 “echo "Using CATALINA_BASE:   $CATALINA_BASE"” 上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

三、实例,以下给出 1G 内存环境下 java jvm 的参数设置参考:

JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "


针对Tomcat ,如果Tomcat 下面有多个应用,尽可能的把lib 下共用的jar 文件放到Tomcat 的lib 下,发布速度和运行速度上也有所提升。

 

题外话:经常看到网友抱怨 tomcat 的性能不如 ... ,不稳定等,其实根据笔者几年的经验,从 " 互联星空 “ 到现在的房产门户网,我们 均使用 tomcat 作为 WEB 服务器,每天访问量百万多, tomcat 仍然运行良好。建议大家有问题多从自己程序入手,多看看 java 的 DOC 文档。

参考文档: http://blogs.sun.com/jonthecollector/entry/presenting_the_permanent_generation

IAR下载Linux环境适配:入门级安装指导 详细介绍如何在Linux系统中完成iar下载与环境配置,帮助开发者快速上手IAR集成开发环境,解决常见安装问题,提升开发效率。 阅读详情

相关推荐

VisDrone2019数据集实战:从下载到YOLO格式转换的完整指南

本文提供了一份完整的VisDrone2019数据集实战指南,详细介绍了从数据集下载、理解其独特的标注格式,到转换为YOLO模型可直接训练格式的全过程。通过清晰的代码示例和步骤讲解,帮助读者掌握处理复杂无人机视觉数据集的核心技能,为基于YOLO的目标检测模型训练做好准备。

weixin_29165725的博客 384

解决eclipse报PermGen space异常的问题

开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。 PermGen space百度翻译为:永久区域内存不足。   1. 先来一张jvm结构图: 内存不足问题一般都是发生在'堆'上,GC作用区域也是在'堆'上。   2. 这个'堆'又划分成了好几块区域,包括:   新生代:包括伊甸园区和存活区。   老年代:   永久带:jdk1.8...

weixin_33912445的博客 1428

【黑马点评】项目知识点及面经整理

【黑马点评】项目知识点及面经整理

m0_52031708的博客 6604

PermGen space简介及其解决方法

1、PermGen space简介 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存溢出,解决方法也一定是加大内存。 说说为什么会内存益出:(1)这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区...

lifengzi9527的专栏 6087

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 443

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 302

JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别

文章目录0、前言(JVM 运行时区域)1、PermGen(永久代)2、Metaspace(元空间)3、总结 0、前言(JVM 运行时区域) 阅读此文章时,必须已经了解了jvm 运行时数据区域。   根据 JVM 规范,JVM 运行时区域大致分为 方法区、堆、虚拟机栈、本地方法栈、程序计数器 五个部分。 1)、方法区 方法区是JVM 所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等...

猎人在吃肉 2万+

宏基因组分析|从Binning到MAG优化的全流程实战指南

本文提供了一份宏基因组分析从Binning到MAG优化的全流程实战指南。详细解析了宏基因组分箱(Binning)的核心原理与必要性,并手把手指导如何利用Bowtie2、MetaBAT2和CheckM等工具构建分箱流水线,进行质量评估与筛选,最终获得高质量宏基因组组装基因组(MAG)。文章还分享了常见问题排查与进阶优化策略,为后续物种分类、功能注释等深度分析奠定坚实基础。

weixin_29260291的博客 455

permgen_什么是PermGen泄漏?

permgen 接下来是对Java应用程序中特定类型的内存问题的实用介绍。 即–我们将分析导致java.lang.OutOfMemoryError:PermGen空间的错误 堆栈跟踪中的症状。 首先,我们将介绍理解该主题所需的核心概念,并解释什么是对象,类,类加载器和JVM内存模型。 如果您熟悉基本概念,则可以直接跳到下一部分,在此我将描述所讨论错误的两种典型情况以及解决它的提示和建议...

最佳 Java 编程 3278

【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛D题数学建模竞赛思路解析摘要:本文针对美赛D题提供系统性解决方案,提出四层建模框架(数据层、机理层、模型层、决策层),强调逻辑闭环比模型复杂度更重要。包含通用建模步骤:指标体系构建、状态评估、动态预测和策略优化,并给出Python基础代码框架。论文建议采用七段式结构,突出从现实问题到决策方案的完整闭环。核心在于通过数据驱动方法揭示问题规律,结合多源数据整合、系统行为建模和风险评估,最终形成可落地的决策建议,体现数学建模解决实际问题的能力。

一键难忘的博客 1082

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

java permgen是什么_Java 的 PermGen 概念的认识,以及相关问题的处理方法

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同...

weixin_31105189的博客 1769

Android 人像分割实战:OpenCV+YOLOv8+NCNN 三库联动(附 GPU 加速 / 内存优化全方案)

本文详细介绍了在Android项目中集成OpenCV+YOLOv8+NCNN实现实时人像分割的技术方案。主要内容包括:项目环境搭建(配置NDK、添加Native模块)、核心库文件集成(OpenCV、NCNN、YOLOv8模型)、JNI接口设计与实现(Kotlin层调用C++算法)。通过Camera API获取图像数据,使用YOLOv8进行人体检测,结合NCNN高性能推理框架实现人像分割处理,最终将原始画面与分割结果(背景透明)同时显示在Android界面上。该项目采用多技术栈协同工作,OpenCV负责图像处

FJN110的博客 233

java.lang.OutOfMemoryError: PermGen space报错解决方案

描述 在tomcat容器中运行web项目时,Linux跟踪日志发现报错如下所述。 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Met...

chunfupang6336的博客 449

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java.lang.OutOfMemoryError: PermGen space解决方案

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。 说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域

记录移动开发相关的知识 1853

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Caused by: java.lang.OutOfMemoryError: PermGen space问题解决方案

eclipse在启动tomcat时出现以上错误,查阅不到这方面的相关资料,故解决后便写了这篇博客,这个错误表示 Java 程序在运行时耗尽了 PermGen(永久代)内存空间。导致无法正常启动。

2401_83558479的博客 1135

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java.lang.OutOfMemoryError: PermGen space原因及解决方案

 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区

孔子说 1649

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space,解决方案

一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invo...

github_37271067的博客 538

java.lang.OutOfMemoryError: PermGen space的解决方案

java.lang.OutOfMemoryError: PermGen space的解决方案   Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError: PermGen space的解决方案: 今天运行J2EE项目的时候抛出异常: Exception in thread “main” java.lang.OutOfMemoryError

月光散 533

Eclipse 出现java.lang.OutOfMemoryError: PermGen space问题解决方案

Eclipse频繁 出现java.lang.OutOfMemoryError: PermGen space 打开eclipse文件夹修改eclipse.ini文件最后加入-XX:PermSize=128M -XX:MaxPermSize=128M保存文件再运行,成功!

599

java.lang.OutOfMemoryError: PermGen space及其解决方案

在使用MyEclipse进行web开发过程中,

xjh1991xjh的专栏 1149

Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案

公司的站点是跑在Tomcat环境下的,运行一段时间后,有时会报这样的错误:java.lang.OutOfMemoryError: PermGen space 在网上查询了一下,大部分都说是jvm虚拟机的内存参数相关,需要调整内存参数。 大致过程如下: vi /jboss/bin/run.bat 找到: set JAVA_OPTS=%JAVA_OPTS% -Xms128

AI开源工具分享 1299

针对java程序java.lang.OutOfMemoryError: PermGen space的解决方案

针对java程序java.lang.OutOfMemoryError: PermGen space的解决方案 1. 对于Tomcat程序:     一般来说,tomcat程序默认的最大内存占用为128M. 此设置可以通过以下方式查看,查看文件/etc/init.d/tomcat6中的JAVA_OPTS配置.     但是以默认的128M的配置,往往是不够的。当看到有提示“ja

言程序 353

解决方案之用Maven编译时报 java.lang.OutOfMemoryError: PermGen space异常

使用: mvn clean package -DskipTests11 对spark进行编译时,会报错: java.lang.OutOfMemoryError: PermGen space11 解决办法: 1.window下: set MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m

seasons1225的博客 2577

java.lang.RuntimeException: PermGen space 解决方案

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。一般修改tomcat有效。 Eclipse开发过程中个VM Arguments的设置 1:jre中的Defau

cst09008的专栏 861

Eclipse中通过Tomcat运行JavaWeb项目报错:java.lang.OutOfMemoryError: PermGen space 错误的解决方案

运行JavaWeb项目的时候抛出异常: Exception in thread “main” java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) ...

Alex的博客 1031
上一篇: 移植嵌入式Linux到ARM处理器:应用实例
下一篇: tomcat 移植到weblogic session 为null 问题
缺陷代码
博客等级 码龄21年 76粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值