




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA_OPTS各参数的含意及配置2010-07-09 09:12:03|分类: linux |标签: |字号大中小订阅 Xms Xmx XX:PermSize XX:MaxPermSize1. 各个参数的含义什么?我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70% 时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。JVM内存限制(最大值) 首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后tomcat可以启动,而有些机器无法启动?通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。谈JAVA_OPTS环境变量不起作用2009-09-23 17:29最近在处理运行一个java应用时,老是出现java.lang.OutOfMemoryError: Java heap space.即时我在环境变量里设置了JAVA_OPTS -Xmx2048m还是报错。 javaeye上搜索了一番,发现很多人都有这个疑问。经过Team Leader的指导,发现: 1、JAVA_OPTS只对tomcat/weblogic等Web服务器中间件有效,以“java -cp *.jar test.Main”方式运行的不会去读取JAVA_OPTS. 2、如果在运行java类,需要设置Heap Size的话,需要如下方式: java -Xmx2048m -jar test.jar 或者java -Xmx1024m -cp douglas.jar com.douglas.Main 3、如果是在Unix或者Aix服务器上,可以直接写下如下语句 export JAVA_OPTS=-Xmx1024m -Djava.awt.headless=true java $JAVA_OPTS -cp douglas.jar com.douglas.Main 或者vi test.sh文件,写下: #!/bin/sh classpath=./douglas.jar /usr/java5/bin/java -Xmx1024M -cp $classpath com.douglas.Main 4、对于非Java语言(C+)调用Java代码,最好的方式是提供给操作员设置的页面,在申明JavaVM时,将JavaOPTS数值放置至JavaVM中。 对于JVM设置,可以查考如下配置example: # Memory configuration JAVA_OPTS=-server JAVA_OPTS=$JAVA_OPTS -Xms1280m JAVA_OPTS=$JAVA_OPTS -Xmx1280m JAVA_OPTS=$JAVA_OPTS -XX:NewSize=640m JAVA_OPTS=$JAVA_OPTS -XX:MaxNewSize=640m JAVA_OPTS=$JAVA_OPTS -XX:SurvivorRatio=5 JAVA_OPTS=$JAVA_OPTS -XX:TargetSurvivorRatio=90 JAVA_OPTS=$JAVA_OPTS -XX:MaxTenuringThreshold=12 JAVA_OPTS=$JAVA_OPTS -XX:+UseConcMarkSweepGC JAVA_OPTS=$JAVA_OPTS -XX:+CMSIncrementalMode JAVA_OPTS=$JAVA_OPTS -XX:+CMSIncrementalPacing JAVA_OPTS=$JAVA_OPTS -XX:+CMSParallelRemarkEnabled JAVA_OPTS=$JAVA_OPTS -XX:+UseParNewGC JAVA_OPTS=$JAVA_OPTS -XX:PermSize=64m JAVA_OPTS=$JAVA_OPTS -XX:MaxPermSize=64m JAVA_OPTS=$JAVA_OPTS -XX:+UseTLAB # Enable class unloading (needed with ConcMarkSweepGC JAVA_OPTS=$JAVA_OPTS -XX:+CMSClassUnloadingEnabled JAVA_OPTS=$JAVA_OPTS -XX:+CMSPermGenSweepingEnabled # debug and memory tweaks to avoid Hotspot Compiler Failure JAVA_OPTS=$JAVA_OPTS -XX:+PrintCompilation JAVA_OPTS=$JAVA_OPTS -XX:CodeCacheMinimumFreeSpace=2M JAVA_OPTS=$JAVA_OPTS -XX:ReservedCodeCacheSize=64M JAVA_OPTS=$JAVA_OPTS -XX:CompileCommandFile=/my/portal/bin/hotspot_compiler # Enable JMX Remote Monitoring JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9000 JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=/my/portal/bin/jmxremote.password JAVA_OPTS=$JAVA_OPTS -Dcom.sun.management.jmxremote.access.file=/my/portal/bin/jmxremote.access # turn on some debug for GC only print the distribution when doing tuning JAVA_OPTS=$JAVA_OPTS -verbose:gc JAVA_OPTS=$JAVA_OPTS -XX:+PrintGCTimeStamps JAVA_OPTS=$JAVA_OPTS -XX:+PrintGCDetails #JAVA_OPTS=$JAVA_OPTS -XX:+PrintTenuringDistribution JAVA_OPTS=$JAVA_OPTS -Xloggc:/my/portal/logs/portal/gc.log # Enable remote debugging port JAVA_OPTS=$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n JAVA 参数设置我tomcat的设置是-Xms1200m-Xmx1500m-XX:MaxNewSize=256m-XX:PermSize=64m-XX:MaxPermSize=128m这样设置有问题吗,怎么老出现内存溢出的错误,我来帮他解答 输入内容已经达到长度限制还能输入 9999 字插入图片删除图片插入地图删除地图插入视频视频地图回答即可得2分经验值,回答被选为满意回答可同步增加经验值和财富值参考资料:匿名回答提交回答取消 2010-6-23 14:48 满意回答 先试试这个:-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 下面是找了2篇文章答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置三、实例,以下给出1G内存环境下java jvm 的参数设置参考:JAVA_OPTS=-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true JAVA_OPTS=-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: NewSize=192m -XX:MaxNewSize=384mCATALINA_OPTS=-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384mLinux:在/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服务执行的是bintomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationTomcat Service ManagerTomcat5ParametersJavaOptions原值为-Dcatalina.home=C:ApacheGroupTomcat 5.0-Djava.endorsed.dirs=C:ApacheGroupTomcat 5.0commonendorsed-Xrs加入 -Xms300m -Xmx350m 重起tomcat服务,设置生效 答案2Tomcat 的JVM 内存溢出问题的解决关键字: tomcat 的jvm 内存溢出问题的解决 最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错误,上网google了一下,了解了一下tomcat的运行机制,也解决了问题,share出来,以备查。 1、首先是: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.bat,在“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行: Java代码 set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m 或修改catalina.sh 在“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行: JAVA_OPTS=$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m 2、其次是:java.lang.OutOfMemoryError: PermGen space 原因: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。 解决方法: 1. 手动设置MaxPermSize大小 修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在Java代码 “echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m “echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m catalina.sh下为: Java代码 JAVA_OPTS=$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m JAVA_OPTS=$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m 另外看到了另外一个帖子,觉得挺好,摘抄如下: 分析java.lang.OutOfMemoryError: PermGen space 发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。 但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。 于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收! 对于以上两个问题,我的处理是: 在catalina.bat的第一行增加: Java代码 set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在catalina.sh的第一行增加: Java代码 JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256mmatlab for java 的实例配置 (根据matlab的帮助文件一步步操作,截图(这里看不见)1. 检查Java环境1) 打开运行窗口2) 输入命令:java version,查看java版本信息3) 输入命令:javac version,查看javac版本信息。如果在系统环境中,JDK路径不是设置在系统变量path中,而是设置在用户变量Java-home中,应加上相应路径,输入命令为:%JAVA_HOME%/bin/javac version。4) 以上检查完成后,就可以进行操作,否则重新配置java环境。2. 实例:发布一个矩阵实例,将M-code编写的功能转换成java可用的组件。1) matlab中所做工作(1)打开MATLAB Builder JA产品启动matlab,在matlab的命令行窗口(以下所说命令,除非特指,均指在matlab的命令行窗口输入的命令)中输入命令:deploytool,打开java发布工具。检查matlab是否正确指向JDK的工作路径,输入命令:getenv JAVA_HOME,检查所指路径是否正确。(2)拷贝实例文件 拷贝%matlab%/toolbox/javabuilder/Examples/MagicSquareExample到matlab的工作空间,把文件名MagicSquareExample重命名为magic_square。(3)测试要发布的M-file文件 在matlab中导入在D:/javabuilder_examples/magic_square/MagicDemoComp 下的makesqr.m文件。为了确保能找到对应的文件,在matlab中要设置对应的工作搜索路径,在“file/setpath”设置工作搜索路径D:/javabuilder_examples/magic_square/MagicDemoComp,点击“save”。makesqr.m文件内容如下:function y = makesqr(x)%MAKESQR Magic square of size x.% Y = MAKESQR(X) returns a magic square of size x.% This file is used as an example for the MATLAB % Builder for Java Language product.% Copyright 2001-2006 The MathWorks, Inc.y = magic(x); 测试m文件是否正常运行,输入命令:makesqr(5),运行结果。(4)创建Java组件 a.创建新的发布项目。点击发布工具箱的“新建”按钮。在打开的窗口中,左边选择MATLAB Builder JA,右边选择Java Package。选择文件保存路径为D:/MyProgram/workspace/matlab/magic_square,输入文件名magicsquare,点击ok按钮。b.重命名类名MATLAB Builder JA 产品根据所建的项目名称自动给创建的类赋名,象目前创建后的项目magicsquare下的类,名称应为:magicsquareclass,重命名为magic。c.确认发布工具面板上的选项Generate Verbose Output已被选择。d.magicsquare项目中添加m-file文件。先选择当前目录至makesqr.m文件所在的路径,在右边文件显示窗口中拖动对应的文件至发布工具窗口,系统自动将该文件放至对应类中,点击保存按钮。e.构建项目,创建初始的java包。在发布工具面板上点击构建项目按钮 ,系统开始构建项目,其操作结果,警告等信息会显示在output窗口上。构建后系统会在项目路径下生成两个文件夹:src和distrib,src包含java源文件magic.class,distrib包含打包文件magicsquare.jar。构建路径及构建内容的选择可以在Deployment Project Settings dialog box设置。(5)选择打包文件点击发布工具面板上的settings按钮,打开设置页面。在左边窗口选择“Packaging”,右边窗口按表格指示操作,最后点击ok按钮。要打包的文件操作MCR Installer选中Include MCR.选项.Auto-generated Javadoc documentation在Additional Files窗口选择项目的/src/doc,点击Add按钮,添加到右边栏上。readme.txt在Additional Files窗口选择项目的/distrib的readme.txt,点击Add按钮,添加到右边栏上。(6)运行打包程序。点击发布工具面板上的打包按钮,对项目进行打包。然后用压缩工具把distrib里的文件打包起来。2) java平台下所做工作(1) 搜集所需的文件,包括:a.MCR Installerb.Javadoc documentationc.readme.txt .mathworks.toolbox.javabuilder (%matlab%/toolbox/javabuilder/jar/javabuilder.jar)e. MATLAB Builder JA创建的magicsquare.jar(2) 在java开发平台测试组件新建一个java项目magic,在src目录下新建一个java程序Getmagic.java,实例文件/javabuilder_examples/magic_square/MagicDemoJavaApp中已经提供源代码。Getmagic.java的源代码见附录1。在magic项目中导入所需的两个jar包,一个是之前用MATLAB Builder JA创建的magicsquare.jar,一个是javabuilder.jar,%matlab%/toolbox/javabuilder/jar/javabuilder.jar。(3) 配置MyEclipse的运行环境。选择Getmagic.java程序,右键选择run-open run dialog,左边选择Application/file,右边需要配置的选项卡有Main、Arguments、Enviroment。Main选项卡:选择相应的程序,和main函数所在的类,点击apply按钮。Arguments选项卡:在Program Arguments中输入参数,如本例输入:5,点击apply按钮。Enviroment选项卡:设置matlab的动态链接库的路径, %matlab%/bin/win32。具体操作:选择Enviroment选项卡,点击new按钮,新建变量path,变量值为D:/MyProgram/matlab/bin/win32。点击Apply按钮应用。(此步骤可以在系统的环境变量中配置) 设置好参数后,点击run按钮,即可运行程序。 3) 用mcrroot替换matlabroot再次测试程序。执行好这一步后就可以直接使用mcr运行程序,即使没有安装matlab也可以使用。(1) 安装mcr。运行之前Matlab的发布工具面板打包的可执行程序magicsquare_pkg.exe,解压出4个文件:_install.bat,magicsquare.jar,readme.txt,MCRInstaller.exe。运行MCRInstaller.exe,安装至指定目录,假设为D:/MyProgram/matlab/mrc/v78。安装过程中可能会出现以下错误,点击ok按钮继续安装即可。(2) 打开Enviroment编辑path变量,选择之前的p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队会务保障课件
- 临潭县第一中学2025-2026学年上学期阶段性测试卷高三语文
- 河北省廊坊市文安县第一中学2025-2026学年高二上学期开学考试语文试卷(含答案)
- 2025-2026学年广西来宾中学高二(上)开学物理试卷(含答案)
- 20xx年集团经理个人年终述职报告范文
- 部门安全培训感悟课件
- 福彩财务合规管理-洞察及研究
- 达尔文学说课件
- 车队驾驶员安全培训课件
- 基于区块链技术的法兰供应链溯源管理在质量风险追溯中的实践困境
- 智慧养猪解决方案演示课件
- 最新中医骨伤科学考试题库及答案
- 产品形态设计课件完整
- 德国巴斯夫抗氧剂和紫外线吸收剂
- SG-A088接地装置安装工程工检验批质量验收记录
- 《芯片原理与技术》课件微流控芯片
- HY_T 0330-2022 海滩养护与修复工程验收技术方法
- 混凝土外观质量缺陷及治理措施PPT课件
- 十四条经络养生课件
- 麻醉医师资格分级授权管理能力评价与再授权制及程序培训考核试题及答案
- 钢结构厂房监理实施细则
评论
0/150
提交评论