tomcat7修改内存 win_Tomcat内存溢出及内存设置方法

本文介绍了如何处理Java的内存溢出问题,特别是针对Tomcat7在Windows环境下的内存设置。针对 PermGen space 和 Java heap space 的内存溢出,给出了相应的解决建议。建议升级到JDK8以避免PermGen space溢出,同时提供了Tomcat解压版和安装版的内存参数设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java的内存有不同类型,不同类型的内存溢出,处理方法不同,一定要看清是那种异常。通常会碰到内存溢出异常有下面两种:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space

PermGen space

PermGen space内存溢出最常见。全称是Permanent Generation space,是指内存的永久保存区域。JDK8废除了PermGen space,可以避免这种类型的内存溢出,也无需设置该项。碰到这种内存溢出建议升级到JDK8,或者设置Perm内存。

Jspxcms的内存设置建议值:

-XX:PermSize=128M:Perm内存最小值。

-XX:MaxPermSize=512M:Perm内存最大值。

Java heap space

Java heap space是堆内存溢出。碰到这种内存溢出,则需要加大堆内存。

Jspxcms的内存设置建议值:

-Xms256M:Heap内存最小值。

-Xmx512M:Heap内存最大值。内存充裕的可以配置为-Xmx1024M

Java内存类型

java内存的类型分为:堆(Heap)和非堆(Non-heap)内存。

堆(Heap)内存。用于存放运行时产生的数据,如运行时创建的对象、数组等数据。堆内存快被占满时,会启动垃圾回收,释放内存空间。如果没有设置Heap内存,默认是物理内存的1/4。现在内存条容量越来越大,堆内存溢出的情况相对较少。堆内存溢出时,出现的错误信息是:java.lang.OutOfMemoryError: Java heap space。

非堆(Non-heap)内存。就是PermGen。用于存放类的空间。默认是物理内存的1/64。java设计之初,各种程序规模相对较小,java类不多,并且运行时类的数量是固定的,所以该空间默认非常小,并且不进行垃圾回收。随着java的急剧发展,各种类库逐渐增多,java程序也变得越来越庞大,类的数量急速膨胀,默认非堆内存的空间越来越不够用。特别是反射机制与动态代理技术的广泛应用,程序可以在运行时创建类,使得PermGen内存溢出变得更为常见。非堆内存溢出时,出现的错误信息是:java.lang.OutOfMemoryError: PermGen space。

Java的设计者们也看到了这个问题,在jdk8中废除了PermGen,并且可以对存放类信息的空间进行垃圾回收。所以碰到java.lang.OutOfMemoryError: PermGen space异常,最好的办法就是升级到jdk8。

内存设置

不同软件、不同版本、不同情况下的设置方法各有不同。如eclipse的内存设置在eclipse目录下的eclipse.ini文件。

Tomcat解压版Windows平台

修改{TOMCAT_HOME}/bin/catalina.bat,在第二行(即在第一行

set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

Tomcat解压版Linux平台

修改TOMCAT_HOME/bin/catalina.sh,在第二行(即在第一行#!/bin/sh之后)插入以下配置:

JAVA_OPTS='-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m'

Tomcat安装版

安装版需要在控制面板里设置。-XX:PermSize=128m -XX:MaxPermSize=512m在Java Options里设置,-Xms256m -Xmx512m分别对应Initial memory pool、Maximum memory pool。

WebLogic

修改{ORACLE_HOME}/user_projects/domains/base_domain/bin/setDomainEnv.sh(windows环境下是.cmd)

WLS_MEM_ARGS_64BIT="-Xms512m -Xmx1024m"

export WLS_MEM_ARGS_64BIT

WLS_MEM_ARGS_32BIT="-Xms512m -Xmx1024m"

export WLS_MEM_ARGS_32BIT

if [ "${JAVA_VENDOR}" != "HP" ] ; then

if [ "${VM_TYPE}" = "HotSpot" ] ; then

WLS_MEM_ARGS_64BIT="-Xms256m -Xmx1024m"

export WLS_MEM_ARGS_64BIT

WLS_MEM_ARGS_32BIT="-Xms256m -Xmx1024m"

export WLS_MEM_ARGS_32BIT

fi

fi

Eclipse中使用Maven启动Tomcat

在Eclipse中使用tomcat6:run或tomcat7:run启动Tomcat,需要在Run Configurations - JRE - VM arguments选项中设置。

1.何为内存模块 (Memory Module)? 内存模块是指一个印刷电路板表面上有镶嵌数个记忆体芯片chips,而这内存芯片通常是DRAM芯片,但近来系统设计也有使用快取隐藏式芯片镶嵌在内存模块上内存模块是安装在PC 的主机板上的专用插槽(Slot)上镶嵌在Module上DRAM芯片(chips)的数量和个别芯片(chips)的容量,是决定内存模块的设计的主要因素。 2.什么是Parity? 早先所使用的存储器数据检错方式是Parity Check,其是以每8比特增加1比特的方式进行检错。因此若是具备Parity的存储器,其数据宽度将比非parity的存储器为大。不过若以 Parity的检错方式看,其多出的奇偶位事实上只用于分辨奇数或偶数个比特数。这种方式仅能得知是某一位发生错误,并无法确定是哪一个位置发生错误,而且无法运用在双数位的检错上。 3.什么是ECC? ECC是另一种更为进步的存储器数据检错机制。其工作的方式与Parity不同,并不是采用单一比特的方式来进行检错,而是采用数据块(block)概念与复杂的演算方法来修正数据。因此不仅能检测多位比特错误,还能进行修正单一比特的错误。 4.SPD的作用是什么? 为Serial Presence Detect 的缩写,它是烧录在EEPROM内的码,以往开机时BIOS必须侦测memory,但有了SPD就不必再去作侦测的动作,而由BIOS直接读取 SPD取得内存的相关资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值