Java.lang.OutOfMemoryError: PermGen space

本文介绍如何在Windows和Linux环境下调整Tomcat服务器的启动参数,包括通过管理页面、配置文件和服务注册列表等方式来优化内存分配及提高运行效率。

http://www.cnblogs.com/Sir-Li/p/4178459.html

参数调整

Windows下调整Tomcat启动参数
 一、命令窗口输入   

  D:\Java\tomcat-7.0.57-Css\bin\tomcat7w.exe //ES//Apache_Tomcat_Css Service

  通过上述命令可打开tomcat的管理页面,点击JAVA进入Java options 输入框

  里面原内容:    

    -Dcatalina.home=D:\Java\tomcat-7.0.57-Css
    -Dcatalina.base=D:\Java\tomcat-7.0.57-Css
    -Djava.endorsed.dirs=D:\Java\tomcat-7.0.57-Css\endorsed
    -Djava.io.tmpdir=D:\Java\tomcat-7.0.57-Css\temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:\Java\tomcat-7.0.57-Css\conf\logging.properties

  在最后面加入:   

    -XX:PermSize=64M
    -XX:MaxPermSize=1024m
    -XX:ReservedCodeCacheSize=48m

  点击应用,点击确认;

  再 修改 D:\Java\tomcat-7.0.57-Css\bin 下的 service.bat 文件

  找到下面这句:

    set "SELF=%~dp0%service.bat"
    rem Guess CATALINA_HOME if not defined
    set "CURRENT_DIR=%cd%"

  在这句后面加上下局:

    set JAVA_OPTS = -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

  保存后在服务上启动即可;

 

二、不注册服务,启动修改

  修改 D:\Java\tomcat-7.0.57-Css\bin 下的 catalina.bat 文件

  找到下面这句:

    rem Guess CATALINA_HOME if not defined

    set "CURRENT_DIR=%cd%"

  在这句后面加上下局:

    set JAVA_OPTS = -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

  保存后启动即可;

三、注册服务 修改注册列表

  运行 regedit
  找到注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation
  再往下找 Procrun 2.0\Tomcat7\Parameters\Java
  有个 Options 设置

    -Dcatalina.home=D:\Java\tomcat-7.0.57-Css
    -Dcatalina.base=D:\Java\tomcat-7.0.57-Css
    -Djava.endorsed.dirs=D:\Java\tomcat-7.0.57-Css\endorsed
    -Djava.io.tmpdir=D:\Java\tomcat-7.0.57-Css\temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:\Java\tomcat-7.0.57-Css\conf\logging.properties


  双击它进行编辑,在末尾增加下面行就搞定了:
    -XX:PermSize=64M
    -XX:MaxPermSize=1024m
    -XX:ReservedCodeCacheSize=48m

linux下调整Tomcat启动参数

在对应linux下的tomcat版本中,修改 catalina.sh

   # vi /usr/tomcat/bin/catalina.sh

   注: /usr/tomcat/bin/catalina.sh 是 tomcat所在目录的bin目录  (linux环境下)

   找到 # OS specific support.  $var _must_ be set to either true or false.

   在上句之前加入

     # JAVA_OPTS

    JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:NewSize=512m -XX:MaxPermSize=256m"

    # CATALINA_OPTS

    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=9004"

    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

 

遇见报错:

报错一、ould not reserve enough space for object heap

报错 二、Out of memory 

报错三、the Network Adapter could not establish the connection

 

前两个报错是属于内存设置问题,第三个是网络问题

 

因为自己在网上搜索遇到很多设置也是类似但是却没有效果的,谨此记录,希望不要被‘坑’!



### 回答1: "java.lang.outofmemoryerror: permgen space" 意思是Java虚拟机的永久代空间已经用完了。这是由于在运行过程中加载的类或元数据占用了太多的内存,导致永久代空间不足。可以通过增加永久代空间的大小来解决这个问题。 ### 回答2: Java.lang.outofmemoryerror: permgen spaceJava虚拟机在执行Java应用时,当永久代的内存被占满了,而无法再为新的类、反射信息、字符串等分配内存时所抛出的异常。一般来说,Java应用使用的是堆内存和永久代内存,而堆内存主要是用于对象实例化和存储,而永久代内存则主要用于存储类信息、方法信息、静态变量信息以及字符串常量等元数据信息。因此,当应用程序中有大量动态创建的类或字符串常量等元数据信息时,就容易导致永久代内存被占满,从而导致该错误发生。 要解决Java.lang.outofmemoryerror: permgen space,可以采取以下几种方法: 1、增大永久代内存:可以通过设置JVM参数-XX:PermSize和-XX:MaxPermSize来增大永久代内存的大小。 2、JVM升级:JVM的新版本优化了永久代内存的管理方式,可以通过升级JVM来解决该错误。 3、清理未使用的类:可以使用一些工具来对应用程序中未使用的类进行清理,从而释放永久代内存。 4、优化应用程序:可以对应用程序进行优化,减少其动态创建类和字符串常量等元数据信息的数量,从而减少永久代内存的占用。 5、重启应用程序:如果以上方法都未能解决该错误,可以尝试重启应用程序,从而释放永久代内存。 总之,Java.lang.outofmemoryerror: permgen space是开发过程中比较常见的错误,需要根据具体情况采取不同的解决方法。 ### 回答3: Java.lang.OutOfMemoryError: PermGen space(永久代空间)通常是在JVM内存不足时发生的错误。PermGen space指的是JVM用于存储类、方法定义等元数据的永久代空间。当JVM加载过多的类、方法或者字符串等时,PermGen space的空间可能会被耗尽,导致OutOfMemoryError的错误。 为了避免Java中的OutOfMemoryError: PermGen space错误,可以采取以下措施: 1. 调整JVM的参数。通过增加PermGen space的大小来缓解这个错误。可以通过在Java命令中使用-XX:PermSize和-XX:MaxPermSize参数来增加永久代的大小,但这样做只解决了问题的表面,没有根本解决这个问题。 2. 优化代码和资源管理。优化代码可以减少类和方法等元数据的数量,同时及时释放程序中不再需要的对象,防止内存泄漏等资源浪费现象。 3. 尽量避免使用动态代理、反射等技术。这些技术会增加系统的开销,导致产生更多的类和方法等元数据,可能会加重PermGen space的压力。 总之,避免OutOfMemoryError: PermGen space错误需要细致的内存管理及代码调优。理性使用JVM的参数调整,避免过渡依赖动态代理、反射等技术是有效的措施。同时,可以借助各种性能工具和监控工具对程序进行优化和管理,提升应用的性能和稳定性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值