天天看点

【Linux】Install Tomcat on Centos

APR
[[email protected] ~]# tar jxvf apr-1.6.5.tar.bz2 
[[email protected] ~]# cd apr-1.6.5
[[email protected] apr-1.6.5]# ./configure --prefix=/usr/local/apr
[[email protected] apr-1.6.5]#  make & make install

[[email protected] ~]# vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
           
JDK
[[email protected] ~]# yum remove -y java-1.7.0-openjdk
[[email protected] ~]# yum remove -y java-1.6.0-openjdk

[[email protected] ~]# tar zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local/

[[email protected] ~]# vi /etc/profile
JAVA_HOME=/usr/local/jdk1.7.0_80
JAVA_BIN=/usr/local/jdk1.7.0_80/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

[[email protected] ~]# source /etc/profile

[[email protected] ~]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
           
OPENSSL
[[email protected] ~]# tar zxvf openssl-1.1.0h.tar.gz 
[[email protected] ~]# cd openssl-1.1.0h
[[email protected] openssl-1.1.0h]# ./config shared zlib  --prefix=/usr/local/openssl
[[email protected] openssl-1.1.0h]# make
[[email protected] openssl-1.1.0h]# make install
[[email protected] openssl-1.1.0h]# mv /usr/bin/openssl ~
[[email protected] openssl-1.1.0h]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
[[email protected] ~]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
[[email protected] ~]# ldconfig
[[email protected] ~]# openssl version
OpenSSL 1.1.0h  27 Mar 2018
           
TOMCAT
[[email protected] ~]# tar -zxvf apache-tomcat-7.0.75.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/apache-tomcat-7.0.75/bin
[[email protected] bin]# tar zxvf tomcat-native.tar.gz
[[email protected] bin]# cd /usr/local/apache-tomcat-7.0.75/bin/tomcat-native-1.2.10-src/native
[[email protected] native]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.7.0_80 --with-ssl=yes
[[email protected] native]# make & make install

[[email protected] ~]# /usr/local/apache-tomcat-7.0.75/bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[[email protected] ~]# tail -n 200 /usr/local//apache-tomcat-7.0.75/logs/catalina.out
INFO: Loaded APR based Apache Tomcat Native library 1.2.10 using APR version 1.6.5.
           
JVM参数调优

堆
-Xms2048m  --初始堆内存大小
-Xmx2048m  --最大堆内存大小
-XX:+HeapDumpOnOutOfMemoryError --在发生内存溢出时自动生成堆内存快照
-XX:HeapDumpPath=/tmp/heapdump.hprof  --改变默认的堆内存快照保存路径

新生代
-Xmn512m  --新生代内存大小
-XX:NewRatio  --新生代与老年代的比值,例如 -XX:NewRatio=3 指定老年代/新生代为3/1. 老年代占堆大小的 3/4 ,新生代占 1/4 
-XX:SurvivorRatio --新生代中Eden区与Survivor区的比值,默认为8,代表Eden:Subrvivor = 8:1
-XX:MaxTenuringThreshold  --晋升到老年代的对象年龄,每次Minor GC之后,年龄就加1,当超过这个参数的值时进入老年代
-XX:PretenureSizeThreshold --直接晋升到老年代对象的大小,设置这个参数后,大于这个参数的对象将直接在老年代分配

持久代
-XX:PermSize=512m  --持久代内存初始大小
-XX:MaxPermSize=512m --持久代内存最大值

CMS收集器(关注响应时间)
-XX:+UseConcMarkSweepGC --使用ParNew + CMS +  Serial Old的收集器组合进行内存回收,Serial Old作为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用。
-XX:+CMSParallelRemarkEnabled  --为了减少第二次暂停的时间,并行执行CMS重标记阶段
-XX:+UseCMSCompactAtFullCollection --由于CMS收集器会产生碎片,此参数设置在GC后是否需要一次内存碎片整理过程,仅在CMS收集器时有效
-XX:CMSFullGCsBeforeCompaction --设置CMS收集器在进行若干次GC后再进行一次内存碎片整理过程,通常与UseCMSCompactAtFullCollection参数一起使用
-XX:CMSInitiatingOccupancyFraction=70  设置CMS收集器在老年代空间被使用多少触发GC,默认值为68%,仅在CMS收集器时有效 
计算公式:CMSInitiatingOccupancyFraction <=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
-XX:+CMSClassUnloadingEnabled --CMS收集器对持久代进行GC
-XX:+ExplicitGCInvokesConcurrent  --无论什么时候调用系统GC,都执行CMS GC,而不是Full GC
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses  --当有系统GC调用时,持久代也被包括进CMS GC的范围内

串行与并行收集器(关注吞吐量)
-XX:+UseSerialGC  --使用Serial + Serial Old的收集器组合进行GC,jvm运行在Client模式下的默认值
-XX:+UseParNewGC --使用ParNew + Serial Old的收集器组合进行GC
-XX:+UseParallelGC --使用Parallel Scavenge +  Serial Old的收集器组合进行GC,jvm运行在Server模式下的默认值
-XX:+UseParallelOldGC --使用Parallel Scavenge +  Parallel Old的收集器组合进行GC
-XX:ParallelGCThreads --设置并行GC进行内存回收的线程数,当JVM独占地使用系统和处理器时使用默认设置更有意义。 但是,如果有多个JVM在同一台主机上运行,我们应该使用-XX:ParallelGCThreads来减少GC线程数到一个适当的值。 例如,如果4个以服务器方式运行的JVM同时跑在在一个具有16核处理器的主机上,设置-XX:ParallelGCThreads=4是明智的,它能使不同JVM的垃圾收集器不会相互干扰。
-XX:GCTimeRatio --GC时间占总时间的比列,默认值为99,即允许1%的GC时间,仅在使用Parallel Scavenge 收集器时有效
-XX:MaxGCPauseMillis --设置GC的最大停顿时间,在Parallel Scavenge 收集器下有效
-XX:UseAdaptiveSizePolicy --动态调整java堆中各个区域的大小以及进入老年代的年龄
-XX:+DisableExplicitGC  --完全忽略系统GC调用(不管使用的收集器是什么类型)

参数示例
export JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -Xmn512m -XX:PermSize
=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBefore
Compaction=0 -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSClassUnloadingEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+ExplicitGCInvokes
ConcurrentAndUnloadsClasses -Djava.awt.headless=true -Duser.timezone=Asia/Shanghai"
           
TOMCAT参数调优

线程池
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>
name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。

namePrefix:为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。

maxThreads :Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是200。

minSpareThreads:最小备用线程数,Tomcat启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10。

maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。

当请求并发高于500(最大备用线程数)的时候,线程池会继续创建线程,来满足特大突发性并发。当并发请求数降下之后,线程池中有空闲线程,那么,无论线程空闲时间是否达到60s,线程池都会进行回收至500。500以内的线程会根据空闲时间是否大于60s来判断是否需要进行回收。
maxThreads是指Tomcat线程池创建的最大线程数,而maxConnections则是Tomcat一瞬间最多能够处理的并发连接数。比如maxThreads=1000,maxConnections=800,假设某一瞬间的并发请求是1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列“排队”,如果acceptCount=100,那么有100个请求会被拒掉。
注意:根据前面所说,只是并发那一瞬间Tomcat会起800个线程处理请求,但是稳定后,某一瞬间可能只有很少的线程处于运行状态,大部分线程是TIMED_WAITING,如果你的应用处理时间够快的话。所以真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。

连接器
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               URIEncoding="UTF-8"
               connectionTimeout="30000"
               enableLookups="false"
               disableUploadTimeout="false"
               connectionUploadTimeout="150000"
               acceptCount="300"
               keepAliveTimeout="120000"
               maxKeepAliveRequests="1"
               compression="on"
               compressionMinSize="2048"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
               redirectPort="8443" />
URIEncoding:Tomcat使用utf8对URI中出现的中文进行解码。

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。

connnectionTimeout:Tomcat与客户端建立socket连接后,直到Tomcat接收到客户端第一个请求,Tomcat的等待时间,若超时,Tomcat关闭连接。

enableLookups:是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为false。

disableUploadTimeout:上传时是否使用超时机制。

connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

keepAliveTimeout:长连接最大保持时间(毫秒),在同一socket连接,第一个请求与第二个请求的最大间隔时间,若超时,Tomcat关闭连接,默认是使用 connectionTimeout 时间,-1 为不限制超时。

maxKeepAliveRequests:表示在Tomcat关闭连接之前,该连接最大支持的请求数。超过该请求数的连接将被关闭,1表示禁用,-1表示不限制个数,默认100个。

compression:是否对响应数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。

compressionMinSize:表示压缩响应数据的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。

compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。

noCompressionUserAgents="gozilla, traviata": 对于以下的浏览器,不启用压缩。

如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了。
           

转载于:https://blog.51cto.com/13598811/2070657

继续阅读