博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat catalina.sh JAVA_OPTS参数说明与配置
阅读量:6858 次
发布时间:2019-06-26

本文共 4208 字,大约阅读时间需要 14 分钟。

牛人写JVM的博客:

http://blog.csdn.net/java2000_wl/article/category/1249100

http://blog.csdn.net/cutesource/article/details/5904501

有几个链接:

 

 

http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html  

http://blog.chinaunix.net/uid-26602509-id-4110244.html  内存溢出之Tomcat内存配置-catalina.sh or catalina.bat

http://www.wangmeng.net.cn/?p=53  tomcat内存溢出(修改catalina.bat后windows启动tomcat服务没有效果)

http://blog.csdn.net/sun8288/article/details/8161813   Windows下Tomcat服务的JVM设置相关

 

最近手头的项目报内存溢出错误,内存溢出(Out Of Memofy)简称为传说中的OOM。^_^ 网上找资料学习了下JAVA_OPTS参数和配置,应用到生产环境,没有再报错。

错误信息:Java.lang.OutOfMemoryError: Java heap space

测试环境:RHEL5.4_x64

jdk-6u20-linux-x64.bin

apache-tomcat-6.0.20

 

生产环境:Windows Server 2008 Enterprise Edition

jdk-6u21-windows-x64

apache-tomcat-6.0.29

Linux修改catalina.sh文件

JAVA_OPTS=”-server -Dfile.encoding=UTF-8 -Xms=512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -verbose:gc -Xloggc:${CATALINA_HOME}/logs/gc.log`date +%Y-%m-%d-%H-%M` -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -noclassgc”

 

Windows修改catalina.bat文件

set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

 

 

Total memory:java虚拟机正在使用的已经从系统那里挖到的内存大小,也就是java虚拟机这个进程当时所占用的所有 内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直 到挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖 -Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。

Max memory:java虚拟机能够从操作系统那里挖到最大内存大小,如果在运行java程序的时候,没有添加-Xmx参数,那么默认就是64兆,这是java虚拟机默认情况下能 从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,建议设为内存的一半。

Free memory:刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,这些挖过来而又没有用上的内存,实际上就是 freeMemory,所以freeMemory的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory可能会有些大。

 

JVM内存设置方法:

Linux系统直接编辑TOMCAT_HOME/bin/catalina.sh文件,如上文件所示,不再多说。

1、Windows系统下,安装版的tomcat可以启动”Configure Tomcat”——”Java”选项配置,如下图所示:

 

 

另外安装JDK的时候若操作系统是64位的,安装的JDK也必须是64位,不然没法启动。Tomcat安装时指定JDK_HOME路径就行了。如下图所示:

 

 

2、绿色版本的tomcat, 直接修改catalina.bat文件,和linux系统不一样,windows系统下环境变量的设定以set命令开头,linux系统的shell运行时是会export环境变量的。

set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

参数说明:

-server:一定要作为第一个参数,在多个CPU时性能佳

-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些

-Xmx:java heap最大值,使用的最大内存

-XX:PermSize:设定内存的永久保存区域

-XX:MaxPermSize:设定最大内存的永久保存区域

-XX:MaxNewSize:

+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

-Xss:每个线程的Stack大小

-verbose:gc 现实垃圾收集信息

-Xloggc:gc.log 指定垃圾收集日志文件

-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

-XX:+UseParNewGC :缩短minor收集的时间

-XX:+UseConcMarkSweepGC :缩短major收集的时间

提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

 

tomcat 的jvm 内存溢出问题的解决

 

1、首先是:java.lang.OutOfMemoryError: Java heap space

解释:

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””上面加入以下行:

set 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)那么就会产生此错误信息了。

 

解决方法:

手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在“echo ”Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:

set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

 

 

 

catalina.sh加set JAVA_OPTS='-Xms64 -Xmx512'无效解决方案

 

 

set JAVA_OPTS='-Xms64 -Xmx512'

上面无效的话这样写:
declare -x JAVA_OPTS="-Xms128m -Xmx256"
"declare -x"一定要加,不然就会报-x指令无效,
还有后面的引号也要注意加上 wq后,重启tomcat即可,ps ax后看到tomcat的进程会变成类似
/opt/jdk1.6.0/bin/java -Xms128m -Xmx256m -Djava.endorsed.dirs=/opt/tomcat/common/e

在windows下,如果使用控制台的方式,也就是直接执行startup.bat方式启动,可以通过修改catalina.bat

set JAVA_OPTS=-Xms256m -Xmx512m
注意,linux下有单引号,win下不用,如果加上单引号,tomcat根本起不来。

你可能感兴趣的文章
第二十二章:动画(八)
查看>>
智慧城市当量力而为 专访曙光云计算公司副总裁张春泉 ...
查看>>
为什么要切换到HTTPS?
查看>>
Android WebView打开网页一片空白
查看>>
【直播回顾】Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux...
查看>>
介绍一下Tiled2Unity的优点与缺点
查看>>
正则表达式的一些探索(偏JavaScript)
查看>>
docker学习系列1 使用docker 快速实现多版本PHP
查看>>
在阿里云做前端,是种怎样的体验?
查看>>
软银重金加注无人货运,9.4亿美元投资机器人公司Nuro
查看>>
Spring Cloud Alibaba基础教程:Nacos的集群部署
查看>>
地铁译:Spark for python developers ---Spark流式数据处理
查看>>
最全技术面试180题:阿里11面试+网易+百度+美团!
查看>>
「镁客·请讲」透彻影像王书浩:用AI“复制”大脑,弥补病理医生的9万缺口...
查看>>
涨姿势,图文带你了解 8 大排序算法
查看>>
Java基础知识的全面巩固_note1(附各种demo code)
查看>>
DataWorks2.0的“业务流程”与1.0的“工作流”的对比
查看>>
基于Kubernetes的容器云在万达的落地
查看>>
阿里联合ICA联盟发布IoT系列标准,智能门锁标准首批授权测试机构名单出炉
查看>>
Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架
查看>>