CentOS 7 Linux 安装Tomcat 8 - JVM内存优化(咋个办呢 zgbn)
2018-02-01 19:26
806 查看
CentOS 7 Linux 安装Tomcat 8 - JVM内存优化(咋个办呢 zgbn)
参考:CentOS 7 Linux 安装Tomcat 8
在JVM运行时,当JVM空闲堆内存大于自身占用内存的70%时,JVM就会自动释放对内存一直达到
内存优化
- 所以我们可以手动去设置
- 建议堆内存的最大值设置
内存溢出
-
-
- 应用程序在启动和运行时所使用的内存超出
JVM非堆内存(永久内存区),用于存放Class和Meta信息,应用程序所有的Class在被JVM加载的时候被放入该区域。它和存放类实例(
内存优化
- 建议根据服务器部署应用程序的实际情况分配,可以通过
- 建议将
内存溢出
- JVM启动加载应用程序时,加载class所使用内存超出
- 当
使用
在
顺便介绍另一个JDK自带的工具
顺便介绍另一个JDK自带的工具
位置:
位置:
位置:
备注:以catalina.sh方式启动Tomcat的方法【点击查看】
进入
1、测试一下
执行下面命令,可以看一下Tomcat一些启动信息。
2、使用
然后重新执行脚本启动Tomcat服务。
备注:在执行
备注:以catalina.sh方式启动Tomcat的方法【点击查看】
进入
1、测试一下
执行下面命令,可以看一下Tomcat一些启动信息。
备注:从进程信息中我们并没有看到
2、使用
在vim下搜索
然后保存退出即可。
停止服务,重新启动服务。
参考:CentOS 7 Linux 安装Tomcat 8
配置Tomcat启动JVM时分配的内存
JVM内存分配默认情况说明
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxPermSize=128m"
JVM内存配置参数 | 描述 |
---|---|
-Xmx | Java Heap最大值,默认值为物理内存的1/4; |
-Xms | Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; |
-Xmn | Java Heap Young区大小,不熟悉最好保留默认值; |
-XX:PermSize | 设定内存的永久保存区域; |
-XX:MaxPermSize | 设定最大内存的永久保存区域; |
-XX:NewSize | 设置JVM堆的新生代的默认大小; |
-XX:MaxNewSize | 设置JVM堆的新生代的最大大小; |
-Xss | 每个线程的Stack大小,不熟悉最好保留默认值; |
JVM堆内存分配
-Xms约定了JVM启动是初始化分配物理内存,默认为物理内存的1/64;
-Xmx约定了JVM运行时最大分配的物理内存,默认是物理内存的1/4;
在JVM运行时,当JVM空闲堆内存大于自身占用内存的70%时,JVM就会自动释放对内存一直达到
-Xms约定的最小值,JVM调整自身堆内存时通常是在GC后发生。
内存优化
- 所以我们可以手动去设置
-Xms与
-Xmx相等,避免在每次GC 后调整堆的大小。
- 建议堆内存的最大值设置
-Xmx为可用内存的最大值的80%。
内存溢出
-
-Xms<
-Xmx时,JVM启动失败;
-
-Xmx> 可用物理内存时,JVM启动失败;
- 应用程序在启动和运行时所使用的内存超出
-Xmx时,JVM发生内存溢出( OutOfMemoryError: Java heap space);
JVM非堆内存分配
-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4;
JVM非堆内存(永久内存区),用于存放Class和Meta信息,应用程序所有的Class在被JVM加载的时候被放入该区域。它和存放类实例(
Instance)的堆区域(
Heap)不同,垃圾回收GC(
Garbage Collection)不会在主程序运行期对非堆内存区(
PermGen space)进行清理。
内存优化
- 建议根据服务器部署应用程序的实际情况分配,可以通过
jconsole工具观察一下JVM启动后内存的使用情况进而分配;
- 建议将
-XX:PermSize与
-XX:MaxPermSize值设置为相等。
内存溢出
- JVM启动加载应用程序时,加载class所使用内存超出
-XX:MaxPermSize,则发生非堆内存溢出错误(OutOfMemoryError: PermGen space);
- 当
-Xmx+
-XX:MaxPermSize两者设置的内存超出系统可用物理内存时,JVM启动失败;
JVM内存的异常错误
感谢参考:http://blog.csdn.net/thunder0709/article/details/16855195OutOfMemoryError: Java heap space
内存溢出主要存在问题就是出现在这个情况中。当在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。OutOfMemoryError: PermGen space
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。OutOfMemoryError: unable to create new native thread
这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。查看JVM内存信息
使用jconsole
工具查看JVM运行时内存
在window系统安装
JDK包中,有自带的
jconsole工具,可以通过
jconsole工具链接远程服务器的
JVM实例,查看
JVM运行时的内存。
顺便介绍另一个JDK自带的工具
jvisualvm,可以使用此工具对JAVA程序进行性能测试,分析程序性能数据等等(具体用法大家自行百度一下)。
顺便介绍另一个JDK自带的工具
jmc,可以使用此工具远程监控JVM,运行此工具后主界面有对此工具的介绍”Oracle Java Mission Control 是什么?”。
位置:
%JAVA_HOME%/bin/jconsole.exe
位置:
%JAVA_HOME%/bin/jvisualvm.exe
位置:
%JAVA_HOME%/bin/jmc.exe
使用JAVA程序查看JVM运行时内存
//最大可用内存,对应-Xmx Runtime.getRuntime().maxMemory(); //当前JVM空闲内存 Runtime.getRuntime().freeMemory(); //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和 Runtime.getRuntime().totalMemory();
配置Tomcat以catalina.sh启动配置JVM内存
综上,已经说明JVM内存的一些注意事情,下面直接描述一下Tomcat通过catalina.sh启动配置JVM内存分配的方法。备注:以catalina.sh方式启动Tomcat的方法【点击查看】
进入
%TOMCAT_HOME%/bin目录下,找到
catalina.sh脚本。
1、测试一下
catalina.sh启动服务是否正常。
执行下面命令,可以看一下Tomcat一些启动信息。
[root@iZ28snxdn5mZ bin]# ./catalina.sh start Using CATALINA_BASE: /opt/apache/tomcat-8 Using CATALINA_HOME: /opt/apache/tomcat-8 Using CATALINA_TMPDIR: /opt/apache/tomcat-8/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar Tomcat started. [root@iZ28snxdn5mZ bin]# ./catalina.sh stop
2、使用
vim编辑器打开
catalina.sh脚本。在该脚本执行语句之前追加下面代码。
JAVA_OPTS="-server -Xms896m -Xmx896m -XX:PermSize=128M -XX:MaxPermSize=128m"
然后重新执行脚本启动Tomcat服务。
[root@iZ28snxdn5mZ bin]# ./catalina.sh start Using CATALINA_BASE: /opt/apache/tomcat-8 Using CATALINA_HOME: /opt/apache/tomcat-8 Using CATALINA_TMPDIR: /opt/apache/tomcat-8/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar Tomcat started. [root@iZ28snxdn5mZ bin]# ps -ef | grep tomcat root 23795 1 3 20:06 pts/0 00:00:01 /usr/bin/java -Djava.util.logging.config.file=/opt/apache/tomcat-8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms896m -Xmx896m -XX:PermSize=128M -XX:MaxPermSize=128m -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache/tomcat-8 -Dcatalina.home=/opt/apache/tomcat-8 -Djava.io.tmpdir=/opt/apache/tomcat-8/temp org.apache.catalina.startup.Bootstrap start root 23838 23179 0 20:06 pts/0 00:00:00 grep --color=auto tomcat [root@iZ28snxdn5mZ bin]# ./catalina.sh stop Using CATALINA_BASE: /opt/apache/tomcat-8 Using CATALINA_HOME: /opt/apache/tomcat-8 Using CATALINA_TMPDIR: /opt/apache/tomcat-8/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128M; support was removed in 8.0 OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0 [root@iZ28snxdn5mZ bin]#
备注:在执行
./catalina.sh stop后,日志提示我们下面两句话,主要的意思就说在
Tomcat 8.0版本开始,不需要在设置
-PermSize、
-MaxPermSize这两个参数了。所以在刚刚配置中直接删掉就可以了。
OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128M; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
配置Tomcat以后台daemon.sh启动配置JVM内存
综上,已经说明JVM内存的一些注意事情,下面直接描述一下Tomcat通过catalina.sh启动配置JVM内存分配的方法。备注:以catalina.sh方式启动Tomcat的方法【点击查看】
进入
%TOMCAT_HOME%/bin目录下,找到
daemon.sh脚本。
1、测试一下
daemon.sh启动服务是否正常。
执行下面命令,可以看一下Tomcat一些启动信息。
备注:从进程信息中我们并没有看到
-server -Xms896m -Xmx896m内存分配的信息,也就是说Tomcat的
daemon.sh启动脚本并没有继承
catalina.sh脚本中的配置信息,所以还需手动为
daemon.sh配置JVM内存分配参数。
[root@iZ28snxdn5mZ bin]# ./daemon.sh start [root@iZ28snxdn5mZ bin]# ps -ef | grep tomcat root 23891 1 0 20:14 ? 00:00:00 jsvc.exec -java-home /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre -user www -pidfile /opt/apache/tomcat-8/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache/tomcat-8/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/commons-daemon.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache/tomcat-8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache/tomcat-8 -Dcatalina.home=/opt/apache/tomcat-8 -Djava.io.tmpdir=/opt/apache/tomcat-8/temp org.apache.catalina.startup.Bootstrap www 23892 23891 19 20:14 ? 00:00:01 jsvc.exec -java-home /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre -user www -pidfile /opt/apache/tomcat-8/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache/tomcat-8/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache/tomcat-8/bin/bootstrap.jar:/opt/apache/tomcat-8/bin/commons-daemon.jar:/opt/apache/tomcat-8/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache/tomcat-8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache/tomcat-8 -Dcatalina.home=/opt/apache/tomcat-8 -Djava.io.tmpdir=/opt/apache/tomcat-8/temp org.apache.catalina.startup.Bootstrap root 23934 23179 0 20:14 pts/0 00:00:00 grep --color=auto tomcat [root@iZ28snxdn5mZ bin]#
2、使用
vim编辑器打开
daemon.sh脚本。在该脚本执行语句之前追加下面代码。
JAVA_OPTS="-server -Xms896m -Xmx896m"
[root@iZ28snxdn5mZ bin]# vim daemon.sh ...
在vim下搜索
JAVA_OPTS=如下图,在后面配置上JVM内存分配参数.
然后保存退出即可。
停止服务,重新启动服务。
[root@iZ28snxdn5mZ bin]# ./daemon.sh stop [root@iZ28snxdn5mZ bin]# ./daemon.sh start [root@iZ28snxdn5mZ bin]# ps -ef | grep tomcat root 23983 1 0 20:22 ? 00:00:00 jsvc.exec -java-home /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre -user www -pidfile /opt/apache/tomcat-8.5.27/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache/tomcat-8.5.27/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache/tomcat-8.5.27/bin/bootstrap.jar:/opt/apache/tomcat-8.5.27/bin/commons-daemon.jar:/opt/apache/tomcat-8.5.27/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache/tomcat-8.5.27/conf/logging.properties -server -Xms896m -Xmx896m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache/tomcat-8.5.27 -Dcatalina.home=/opt/apache/tomcat-8.5.27 -Djava.io.tmpdir=/opt/apache/tomcat-8.5.27/temp org.apache.catalina.startup.Bootstrap www 23984 23983 7 20:22 ? 00:00:01 jsvc.exec -java-home /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre -user www -pidfile /opt/apache/tomcat-8.5.27/logs/catalina-daemon.pid -wait 10 -outfile /opt/apache/tomcat-8.5.27/logs/catalina-daemon.out -errfile &1 -classpath /opt/apache/tomcat-8.5.27/bin/bootstrap.jar:/opt/apache/tomcat-8.5.27/bin/commons-daemon.jar:/opt/apache/tomcat-8.5.27/bin/tomcat-juli.jar -Djava.util.logging.config.file=/opt/apache/tomcat-8.5.27/conf/logging.properties -server -Xms896m -Xmx896m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dignore.endorsed.dirs= -Dcatalina.base=/opt/apache/tomcat-8.5.27 -Dcatalina.home=/opt/apache/tomcat-8.5.27 -Djava.io.tmpdir=/opt/apache/tomcat-8.5.27/temp org.apache.catalina.startup.Bootstrap root 24026 23179 0 20:22 pts/0 00:00:00 grep --color=auto tomcat [root@iZ28snxdn5mZ bin]#
相关文章推荐
- CentOS 7 Linux 安装Tomcat 8 - 同一个软件包启动多个服务实例(咋个办呢 zgbn)
- CentOS 7 Linux 安装Tomcat 8(咋个办呢 zgbn)
- Linux(Centos)之安装tomcat并且部署Java Web项目
- linux centOS6.5 下安装 (多个)tomcat 流程
- Linux(Centos)安装tomcat并且部署Java Web项目
- Linux基本操作系列(二):在CentOS 6.8系统上安装Tomcat并配置自动启动
- CentOS 5 linux tomcat6.0的安装
- Linux(CentOS 7)下安装配置nginx代理多个tomcat实例和应用
- Linux(Centos)之安装tomcat并且部署Java Web项目(转)
- Linux(CentOS)下配置安装Tomcat并配置JDK环境
- (五)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - Mysql安装
- CentOS 7 Linux 安装Nginx - yum方式(咋个办呢 zgbn)
- Linux基本操作系列(二):在CentOS 6.8系统上安装Tomcat并配置自动启动
- linux(centos 65)下安装 git jdk maven tomcat nginx tomcat mongodb
- linux(centos)下tar包安装jdk和tomcat,以及部署web项目
- CentOS-7.0./linux中安装与配置Tomcat-7的方法
- linux tomcat jvm内存优化
- Linux(CentOS)下配置安装Tomcat并配置JDK环境
- Linux基本操作系列(二):在CentOS 6.8系统上安装Tomcat并配置自动启动
- linux应用之tomcat的安装及配置(centos)