JDK/Tomcat升级
2017-02-25 00:00
218 查看
背景:公司要求项目引入SSO(Single Sign On),SSO对JDK版本要求最低是1.7,而目前机器使用的是1.6版本,需要升级JDK。
参考:
Tomcat8安装和配置、优化
G1垃圾回收器
实战Java虚拟机
我并不需要在测试线上机器上打包编译,仅仅需要一个可供应用运行的环境,所以我选择下载Jre。
这样在Tomcat启动时就会使用指定的Jre环境。
修改Tomcat文件夹下bin/catalina.sh文件,文件头添加。
Linux下启动、关闭Tomcat分别执行bin下startup.sh和shutdown.sh脚本。
如果执行shutdown.sh仍然无法停止Tomcat,可以修改shutdown.sh脚本。
参数说明:
name:用于区分线程池属性,必须独一无二。
namePrefix:线程池创建线程名称前缀。
maxThreads:线程池最大值,默认值200。
prestartminSpareThreads:默认false,只有true时minSpareThreads才会有效果。
minSpareThreads:线程池最小值,默认25。
maxQueueSize:最大的等待队列数,超过则拒绝请求,默认Integer.MAX_VALUE。
className:默认值org.apache.catalina.core.StandardThreadExecutor,实现org.apache.catalina.Executor接口,最好不要修改。
threadPriority:线程优先级,默认5。
daemon:是否以守护线程运行,默认true。
maxIdleTime:当线程池线程数量大于minSpareThreads时,一个空闲线程最大存活时间,默认1分钟。
threadRenewalDelay:如果有ThreadLocalLeakPreventionListener配置,会监听请求是否停止;停止时,会更新线程,为了避免同一时刻更新所有线程,设置任意2个线程更新间隔时间,默认1秒。
参数说明:
protocol,默认HTTP/1.1,org.apache.coyote.http11.Http11Nio2Protocol(Tomcat8/9)org.apache.coyote.http11.Http11NioProtocol(Tomcat6/7)
allowTrace:是否运行TRACE HTTP请求,默认false。
asynTimeout:异步请求超时时间,默认30000(30秒)。
enableLookups:默认false,禁用DNS查询功能。
maxHeaderCount:header中参数个数,默认100。
maxParameterCount:GET/POST请求中带有参数个数,默认10000个。
maxPostSize:以FORM URL参数方式的POST提交方式,限制提交最大的大小,默认是2M;设置-1禁用限制。
port:tcp端口,设置0则Tomcat随机找一个空闲端口使用。
redirectPort:接收到SSL请求后重定向的端口号。
URIEncoding:URI编码格式。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认100。
acceptorThreadCount:接受连接的线程数,默认值1。多核CPU最好设置成2。
compressableMimeType:默认值text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,逗号分隔,HTTP compression参数来使用。
compression:使用GZIP压缩来节省带宽,"on":打开,"off":关闭。
compressionMinSize:默认值2048,compression设置"on"生效,输出数据压缩最小值。
connectionTimeout:连接超时时间,默认60秒。
connectionUploadTimeout:针对文件上传的超时时间,disableUploadTimeout参数必须设置为false。
disableUploadTimeout:设置true禁止服务器对文件上传给予更长的超时时间。
executor:指定执行器。
maxConnections:服务器能接受和处理的最大连接数;当连接数到达该值时,服务接受连接但不处理,接受连接数据受acceptCount控制。NIO、NIO2默认值10000。
参数说明:
-server:使用Server模式运行程序,会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化。
-Xmx...m:设置JVM最大可用内存。
-Xms...m:设置JVM最小可用内存,可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn..m:设置JVM年轻代内存大小。
-Xss...k:设置线程栈大小。
-XX:PermSize=...m:设置永久代大小。
-XX:MaxPermSize=...m:设置最大永久代大小。
-XX:+UseParNewGC:新生代使用ParNew回收器。
-XX:+UseConcMarkSweepGC:老年代使用CMS。
-XX:ParallelGCThreads=.:ParNew回收器工作时线程数量,CPU数量小于8时,值等于CPU数量;CPU大于8时,值为3+(5*CPU_COUNT)/8。
-XX:+UseCMSCompactAtFullCollection:CMS是一个标记清除回收器,会产生内存碎片,该设置在垃圾收集完成后,进行一次内存碎片整理。
-XX:CMSInitiatingOccupancyFraction:指定当老年代空间使用率达到多少时,进行一次CMS垃圾回收。
-XX:SurvivorRatio=.:年轻代分为eden+2survivor(from,to),比值代表eden/survivor的值。
-XX:MaxTenuringThreshold=..:新生代对象存活次数(经过GC),晋升老年代。
-Dxxx=xxx:设置应用需要的参数。
CMS(Concurrent Mark Sweep)并发标记清除,多次垃圾回收之后会产生内存碎片,需要在多次GC之后进行一次内存碎片整理。
G1(Garbage-First)是JDK 1.7中正式使用全新的垃圾回收器,G1回收器拥有独特的垃圾回收策略;从分代上看,G1依然属于分代垃圾回收器,会区分年轻代和老年代;但从堆结构上看,它不要求整个年轻代、老年代都连续;使用了分区算法。
G1特点:
并行性: G1在回收期间,可以由多个GC线程同时工作,有效利用多核计算能力。
并发性: G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此一般来说,不会在整个回收期间完全阻塞应用程序。
分代GC: G1依然是一个分代收集器,但是和之前回收器不同,同时兼顾年轻代和老年代;对比其他回收器,他们或工作在年轻代或老年代。
空间整理: G1在回收过程中,会进行适当的对象移动,减少空间碎片。
可预见性: 由于分区的原因,G1可以只选取部分区域进行内存回收,这样缩小了回收后的范围,因此对于全局停顿也能得到较好的控制。
新的JVM参数:
把JVM参数配置在bin/catalina.sh文件头中。
G1参数说明:
-XX:+UseG1GC:使用 G1 (Garbage First) 垃圾收集器.
-XX:MaxGCPauseMillis=n:设置最大GC停顿时间(GC pause time)指标(target). 这是一个软性指标(soft goal), JVM 会尽量去达成这个目标.
-XX:InitiatingHeapOccupancyPercent=n:启动并发GC周期时的堆内存占用百分比. G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示"一直执行GC循环". 默认值为 45.
-XX:G1ReservePercent=n:设置堆内存保留为假天花板的总量,以降低提升失败的可能性. 默认值是 10.
-XX:G1HeapRegionSize=n:使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.
参考:
Tomcat8安装和配置、优化
G1垃圾回收器
实战Java虚拟机
升级JDK
公司测试线上服务器安装的JDK版本是jdk1.6.0_45,我打算安装最新的Jre1.8.0_121。JDK与JRE区别
JVM = Class loader system + Runtime data area + Execution Engine. JRE = JVM + Java packages classes(like util, math, lang, awt, swing etc)+ Runtime libraries. JDK = JRE + Development/debugging tools.
我并不需要在测试线上机器上打包编译,仅仅需要一个可供应用运行的环境,所以我选择下载Jre。
修改Tomcat Jre配置
修改Tomcat文件夹下bin/catalina.sh文件,文件头添加。JRE_HOME=/XXX/jre1.8.0_121
这样在Tomcat启动时就会使用指定的Jre环境。
升级Tomcat
升级Tomcat到9.0.0.M17版本(该版本运行环境必须>=1.8)。修改Tomcat文件夹下bin/catalina.sh文件,文件头添加。
CATALINA_HOME=Tomcat路径 $CATALINA_HOME/catalina.pid
Linux下启动、关闭Tomcat分别执行bin下startup.sh和shutdown.sh脚本。
如果执行shutdown.sh仍然无法停止Tomcat,可以修改shutdown.sh脚本。
//最后一行 exec "$PRGDIR"/"$EXECUTABLE" stop "$@" //改为 exec "$PRGDIR"/"$EXECUTABLE" stop 10 -force
Tomcat优化
修改conf/server.xml文件。<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" maxQueueSize = "100" prestartminSpareThreads="true"/>
参数说明:
name:用于区分线程池属性,必须独一无二。
namePrefix:线程池创建线程名称前缀。
maxThreads:线程池最大值,默认值200。
prestartminSpareThreads:默认false,只有true时minSpareThreads才会有效果。
minSpareThreads:线程池最小值,默认25。
maxQueueSize:最大的等待队列数,超过则拒绝请求,默认Integer.MAX_VALUE。
className:默认值org.apache.catalina.core.StandardThreadExecutor,实现org.apache.catalina.Executor接口,最好不要修改。
threadPriority:线程优先级,默认5。
daemon:是否以守护线程运行,默认true。
maxIdleTime:当线程池线程数量大于minSpareThreads时,一个空闲线程最大存活时间,默认1分钟。
threadRenewalDelay:如果有ThreadLocalLeakPreventionListener配置,会监听请求是否停止;停止时,会更新线程,为了避免同一时刻更新所有线程,设置任意2个线程更新间隔时间,默认1秒。
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" maxConnections="10000" redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" />
参数说明:
protocol,默认HTTP/1.1,org.apache.coyote.http11.Http11Nio2Protocol(Tomcat8/9)org.apache.coyote.http11.Http11NioProtocol(Tomcat6/7)
allowTrace:是否运行TRACE HTTP请求,默认false。
asynTimeout:异步请求超时时间,默认30000(30秒)。
enableLookups:默认false,禁用DNS查询功能。
maxHeaderCount:header中参数个数,默认100。
maxParameterCount:GET/POST请求中带有参数个数,默认10000个。
maxPostSize:以FORM URL参数方式的POST提交方式,限制提交最大的大小,默认是2M;设置-1禁用限制。
port:tcp端口,设置0则Tomcat随机找一个空闲端口使用。
redirectPort:接收到SSL请求后重定向的端口号。
URIEncoding:URI编码格式。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认100。
acceptorThreadCount:接受连接的线程数,默认值1。多核CPU最好设置成2。
compressableMimeType:默认值text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,逗号分隔,HTTP compression参数来使用。
compression:使用GZIP压缩来节省带宽,"on":打开,"off":关闭。
compressionMinSize:默认值2048,compression设置"on"生效,输出数据压缩最小值。
connectionTimeout:连接超时时间,默认60秒。
connectionUploadTimeout:针对文件上传的超时时间,disableUploadTimeout参数必须设置为false。
disableUploadTimeout:设置true禁止服务器对文件上传给予更长的超时时间。
executor:指定执行器。
maxConnections:服务器能接受和处理的最大连接数;当连接数到达该值时,服务接受连接但不处理,接受连接数据受acceptCount控制。NIO、NIO2默认值10000。
JVM优化
原先JVM参数配置:-server -Xms8g -Xmx8g -Xmn1g -Xss2048K -XX:PermSize=512m -XX:MaxPermSize=512m -XX:ParallelGCThreads=8 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=10 -XX:CMSInitiatingOccupancyFraction=80 -Dxxx=xxx
参数说明:
-server:使用Server模式运行程序,会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化。
-Xmx...m:设置JVM最大可用内存。
-Xms...m:设置JVM最小可用内存,可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn..m:设置JVM年轻代内存大小。
-Xss...k:设置线程栈大小。
-XX:PermSize=...m:设置永久代大小。
-XX:MaxPermSize=...m:设置最大永久代大小。
-XX:+UseParNewGC:新生代使用ParNew回收器。
-XX:+UseConcMarkSweepGC:老年代使用CMS。
-XX:ParallelGCThreads=.:ParNew回收器工作时线程数量,CPU数量小于8时,值等于CPU数量;CPU大于8时,值为3+(5*CPU_COUNT)/8。
-XX:+UseCMSCompactAtFullCollection:CMS是一个标记清除回收器,会产生内存碎片,该设置在垃圾收集完成后,进行一次内存碎片整理。
-XX:CMSInitiatingOccupancyFraction:指定当老年代空间使用率达到多少时,进行一次CMS垃圾回收。
-XX:SurvivorRatio=.:年轻代分为eden+2survivor(from,to),比值代表eden/survivor的值。
-XX:MaxTenuringThreshold=..:新生代对象存活次数(经过GC),晋升老年代。
-Dxxx=xxx:设置应用需要的参数。
CMS(Concurrent Mark Sweep)并发标记清除,多次垃圾回收之后会产生内存碎片,需要在多次GC之后进行一次内存碎片整理。
G1(Garbage-First)是JDK 1.7中正式使用全新的垃圾回收器,G1回收器拥有独特的垃圾回收策略;从分代上看,G1依然属于分代垃圾回收器,会区分年轻代和老年代;但从堆结构上看,它不要求整个年轻代、老年代都连续;使用了分区算法。
G1特点:
并行性: G1在回收期间,可以由多个GC线程同时工作,有效利用多核计算能力。
并发性: G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此一般来说,不会在整个回收期间完全阻塞应用程序。
分代GC: G1依然是一个分代收集器,但是和之前回收器不同,同时兼顾年轻代和老年代;对比其他回收器,他们或工作在年轻代或老年代。
空间整理: G1在回收过程中,会进行适当的对象移动,减少空间碎片。
可预见性: 由于分区的原因,G1可以只选取部分区域进行内存回收,这样缩小了回收后的范围,因此对于全局停顿也能得到较好的控制。
新的JVM参数:
-server -Xms8g -Xmx8g -Xss2048K -XX:+UseG1GC -XX:MaxGCPauseMillis=500 XX:InitiatingHeapOccupancyPercent=55 -XX:ParallelGCThreads=10 -XX:+DisableExplicitGC
把JVM参数配置在bin/catalina.sh文件头中。
JAVA_OPTS="xxx"
G1参数说明:
-XX:+UseG1GC:使用 G1 (Garbage First) 垃圾收集器.
-XX:MaxGCPauseMillis=n:设置最大GC停顿时间(GC pause time)指标(target). 这是一个软性指标(soft goal), JVM 会尽量去达成这个目标.
-XX:InitiatingHeapOccupancyPercent=n:启动并发GC周期时的堆内存占用百分比. G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示"一直执行GC循环". 默认值为 45.
-XX:G1ReservePercent=n:设置堆内存保留为假天花板的总量,以降低提升失败的可能性. 默认值是 10.
-XX:G1HeapRegionSize=n:使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.
相关文章推荐
- eclipse ssm 项目tomcat7、jdk1.7升级为tomcat8、jdk1.8报错
- Tomcat升级JDK
- java项目从1.6升级到1.8遇到的问题(eclipse不支持jdk1.8与Tomcat8.0)
- JDK和Tomcat环境变量配置
- 推荐绿色免费JDK + Tomcat + MySQL集成套件
- 使用jdk自带的jvisualvm.exe监控远程服务器中的tomcat
- JDK + Tomcat + Eclipse + MyEclipse 安装配置
- redhat下安装jdk和tomcat
- Linux下安装JDK/安装Tomcat
- 阿里云上配置web环境 jdk+tomcat+mysql
- meyclipse tomcat jdk 内存参数设置
- Java:几个基本概念 IDE/SDK(JDK)/Tomcat/JavaBean/Serverlet/JSP/JavaScript
- windows 配置tomcat并默认使用jdk
- 你知道升级 tomcat 8.5.x后cookie有什么变化吗?
- Apach+Tomcat+JDK 的配置方案
- centos7安装jdk+tomcat+nginx+mysql
- JRE Version Migration Guide&Lucene JDK版本影响&升级注意
- Linux Ubuntu系统安装JDK、Eclipse、Tomcat
- Ubuntu下安装配置JDK,Tomcat
- 直接启动tomcat时为tomcat指定JDK