`
lishumingwm163.com
  • 浏览: 338541 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

修改Tomcat的运行内存 & JSP中查看当前的内存使用状况

    博客分类:
  • java
 
阅读更多

一、设置JVM内存设置

 

1. 设置JVM内存的参数有四个:

 

-Xmx    Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

 

-Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

 

-Xmn    Java Heap Young区大小,不熟悉最好保留默认值;

 

-Xss    每个线程的Stack大小,不熟悉最好保留默认值;

 

2. 如何设置JVM内存分配:

 

(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):

 

java -Xmx128m -Xms64m -Xmn32m -Xss16m Test

 

(2)当在集成开发环境下(如eclipse)启动并使用JVM时:

 

a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):

 

  1. -vmargs  
  2. -Xms40m  
  3. -Xmx256m 

 

-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

 

此处设置的参数值可以通过以下配置在开发工具的状态栏显示:

 

在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true

 

修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:

 

  1. -debug  
  2. options  
  3. -vm  
  4. javaw.exe 

 

重新启动eclipse,就可以看到下方状态条多了JVM信息。

 

b. 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)

 

编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

 

c. 打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)

 

选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

 

注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:

 

开发环境的设置为:-Xmx256m,而类Test的设置为:-Xmx128m -Xms64m,则运行Test时生效的设置为:

 

-Xmx256m -Xms64m

 

(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):

 

a. 设置环境变量:

 

变量名:CATALINA_OPTS

 

变量值:-Xmx128m -Xms64m -Xmn32m -Xss16m

 

b. 打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m

 

二、查看设置JVM内存信息

 

Runtime.getRuntime().maxMemory();  //最大可用内存,对应-Xmx

 

Runtime.getRuntime().freeMemory();  //当前JVM空闲内存

 

Runtime.getRuntime().totalMemory();  //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和

 

关于maxMemory(),freeMemory()和totalMemory():

 

maxMemory()为JVM的最大可用内存,可通过-Xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;

 

totalMemory()为当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和,会随着JVM使用内存的增加而增加;

 

freeMemory()为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很 小,而JVM实际可用内存并不等于freeMemory(),而应该等于 maxMemory()-totalMemory()+freeMemory()。及其设置JVM内存分配。

 

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。

 

PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。

 

GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误

 

Java Heap分为3个区
1.Young
2.Old
3.Permanent

 

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。

 

JVM的Heap分配可以使用-X参数设定,

 

-Xms
初始Heap大小

-Xmx
java heap最大值 

 

-Xmn
young generation的heap大小

 

JVM有2个GC线程
第一个线程负责回收Heap的Young区
第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?

 

有如下原因:
1.程序内调用了System.gc()或Runtime.gc()。
2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
3.Java的Heap太小,一般默认的Heap值都很小。
4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。

 

如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间

 

经验之谈:

 

1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

 

注意:

 

1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

 

Stack的设定
每个线程都有他自己的Stack。

 

-Xss
每个线程的Stack大小

 

Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。

 

硬件环境

 

硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。

 

4种GC

 

1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

 

单文件的JVM内存进行设置

 

默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

 

tomcat启动jvm内存设置

 

Linux:

 

在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是 利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是 catalina.bat的设置.解决办法:

 

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions

 

原值为

 

-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs加入 -Xms300m -Xmx350m

 

重起tomcat服务,设置生效

 

weblogic启动jvm内存设置

 

在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。

 

JBoss

 

默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"

 

Eclipse

 

在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大

 

Websphere

 

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机


配置Demo如下:

在catalina.bat中加上红色那行

set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
set JAVA_OPTS= -Xms512M -Xmx1024M


===JSP中查看当前的内存使用状况=


Runtime lRuntime = Runtime.getRuntime();
out.println("*** BEGIN MEMORY STATISTICS ***");
out.println("Free  Memory: "+lRuntime.freeMemory()/1024/1024+"M");
out.println("Max   Memory: "+lRuntime.maxMemory()/1024/1024+"M");
out.println("Total Memory: "+lRuntime.totalMemory()/1024/1024+"M");
out.println("Available Processors : "+lRuntime.availableProcessors()+"");
out.println("*** END MEMORY STATISTICS ***");

分享到:
评论

相关推荐

    tomcat内存溢出总结

    - **操作系统限制**:不同的操作系统对进程内存的使用有不同的限制,例如Windows XP/2003可以通过修改`boot.ini`文件中的`/PAE`和`/3GB`选项来增加可用内存。 - **JVM版本兼容性**:不同版本的JDK对内存参数的支持也...

    linux下tomcat优化设置最大连接数内存jconsole监控.docx

    2. **编写 JSP 页面**:创建一个 JSP 文件,用于输出当前 JVM 的内存使用情况,代码如下: ```jsp Runtime lRuntime = Runtime.getRuntime(); out.println("***BEGIN MEMORY STATISTICS***"); out.println(...

    一个JSP页面导致的tomcat内存溢出的解决方法

    3. 修改JSP页面指令:在本例中,通过在JSP页面的page指令中添加`session=false`属性,可以告诉容器在处理这个页面时不使用session对象。这会减少为每个用户会话生成session对象的需要,从而节约内存。 4. 调整...

    linux版的tomcat

    Linux版的Tomcat是Apache软件基金会的开源项目,主要用于运行Java Servlet和JavaServer Pages(JSP)的应用服务器。它在Linux操作系统上的安装和管理对于开发者和系统管理员来说至关重要,因为Linux以其稳定性和安全...

    myeclipse 解决内存的问题

    在使用MyEclipse开发工具的过程中,用户可能会遇到性能下降的问题,比如启动速度变慢、响应时间加长等。这些问题通常与MyEclipse所占用的内存资源有关。本文将详细介绍如何优化MyEclipse的内存配置,从而提高其运行...

    tomcat发布javaweb项目,以及tomcat的配置

    2. 配置服务器:在Tomcat的conf/server.xml文件中,找到`<Host>`标签,设置其`appBase`属性为".",这表示应用的基础目录为当前目录,从而省略项目名。 3. 配置虚拟主机:同样在server.xml中,可以创建多个`<Host>`...

    各种版本tomcat压缩包

    而64位Tomcat则运行在64位操作系统上,可以更好地利用系统资源,特别是当需要处理大量数据或内存密集型应用时,64位Tomcat通常表现更好。选择哪个版本取决于你的服务器硬件和操作系统。 5. **部署与配置**: Tomcat...

    linux tomcat 64

    Tomcat是Apache软件基金会的项目,它是一个开源的、免费的Java Servlet容器,实现了JavaServer Pages(JSP)、Servlet以及Java EE中的WebSocket等规范。在64位操作系统上使用64位Tomcat可以充分利用系统的内存资源,...

    tomcat 实时监控工具

    Tomcat是Apache软件基金会的Jakarta项目下的一个开源Java Servlet容器,主要用于运行Java Web应用程序,包括JSP和Servlet。 Lambda Probe以其易用性和丰富的特性,深受开发者和运维人员的喜爱。当您将压缩包中的jar...

    linux环境64位tomcat7

    在Linux环境中部署和运行64位的Tomcat7是一个常见的任务,尤其对于开发和运维人员来说,这是一项基本技能。Tomcat是一个流行的开源Java Servlet容器,它实现了Java EE的Web应用服务器规范,如Servlet和JavaServer ...

    在eclipse中配置Tomcat环境.pdf

    1. 可以根据系统资源情况调整Tomcat的内存参数,例如设置最小内存值为`-Xms128M`,最大内存值为`-Xmx512M`。 2. 这些参数可在Eclipse中直接配置或通过修改Tomcat的启动脚本实现。 #### 四、测试配置 **步骤1:创建...

    tomcat7 for win7 64

    10. **故障排查**:当遇到问题时,查看日志文件、检查系统资源使用情况(如CPU和内存),以及检查配置文件的正确性都是常见的排查步骤。 总的来说,"Tomcat7 for Win7 64"是一个强大的Java Web服务器,适用于开发和...

    apache-tomcat-8.0.47-windows-x64.zip

    - `lib`目录存储Tomcat运行时所需的库文件。 - `webapps`目录是默认的应用部署位置,你可以将你的Web应用的WAR文件或解压后的目录放在这里。 - `logs`目录用于存放日志文件,帮助诊断问题。 - `temp`目录是临时...

    tomcat 安装、配置及调优

    Apache Tomcat 是一款开源的Servlet容器,它实现了Servlet规范,同时也支持JSP规范。Tomcat因其简单易用且功能强大而广泛应用于中小型项目中。 **安装步骤:** 1. **下载Tomcat:** 访问[Apache Tomcat官方网站]...

    011 装机修改tomcat连接池

    【标题】"011 装机修改tomcat连接池"涉及到的是在服务器装机配置过程中,调整Apache Tomcat应用服务器的连接池设置。Tomcat是Java Servlet和JavaServer Pages(JSP)的开源实现,它内置了一个数据库连接池,用于管理...

    apache-tomcat-7.0.77.zip

    Apache Tomcat 7.0.77 是一个广泛使用的开源软件,主要用于部署和运行Java Servlets和JavaServer Pages (JSP)。这个版本是专为Linux操作系统设计的,因此我们来详细探讨一下Tomcat 7在Linux环境下的安装、配置、管理...

    TOMCAT内存溢出及大小调整的实现方法

    - 如果Tomcat作为Windows服务启动,则需要修改注册表中的JvmMs和JvmMx项,设置最小和最大内存使用参数,并重启Tomcat服务器以使更改生效。 ### 额外优化建议 为避免重复占用内存,建议将相同的第三方jar文件移置...

    apache-tomcat-7.0.82.tar.gz

    此外,监控Tomcat的状态和资源使用情况,如内存、CPU等,可以帮助我们及时发现和解决问题。 总的来说,Apache Tomcat 7.0.82是Linux环境中部署Java Web应用的重要工具,其配置和管理需要对Java EE、Linux系统以及...

    jsp课后答案

    - 在搭建JSP环境时,必须先安装JDK(Java Development Kit),这是因为Tomcat作为JSP的容器,其底层依赖于Java运行环境。 - **安装顺序**:首先安装JDK,再安装Tomcat。 **知识点二:使用startup.bat启动Tomcat的...

    JEUS6.docx

    此页面能够提供关于JEUS服务器的配置信息,包括当前内存占用的状况。 其次,利用`jconsole`工具可以更深入地监控JEUS的运行状态。`jconsole`位于Java安装目录的bin子目录下,它是一个强大的Java应用程序性能监控...

Global site tag (gtag.js) - Google Analytics