tomcat安装过程这里不进行说明,本章节重点阐述tomcat常见配置及优先。

1 修改访问端口等配置

Tomcat安装或压缩包解压后一般默认访问端口是8080,关闭端口是8005,如果所在机器上部署了其它的应用程序占用了这两个端口或者其中一个端口,都会导致Tomcat不能正常启用,就需要修改这两个端口。
在Windows和Linux环境中这个配置是一样的,都是修改
apache-tomcat-xxx\conf\server.xml中的对应内容:
关闭端口

<Server port="8005" shutdown="SHUTDOWN">

访问端口

 <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               keepAliveTimeout="600000"
               redirectPort="8443"
               URIEncoding="UTF-8"
               useBodyEncodingForURI="true" />

单机部署模式下,建议增加以下配置项来提升网络传输效率:

compression=”on”
compressionMinSize=”1024”
compressableMimeType=”text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/xml,application/json”

禁用tomcat的AJP协议:

注释:
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

2 JDK环境配置

Tomcat的运行需要java虚拟机的支持,需要配置jdk的环境。如果是war包部署,有两种配置:一个是安装jdk后配置环境变量;一个是在Tomcat配置文件中指定jdk路径。

2.1 方式一:强制指定当前tomcat的环境变量(推荐)

通过在Tomcat的bin目录中为catalina.sh文件加上指定的JAVA_HOME路径。
假定你的jdk放在:/soft/jdk1.8目录中,那么分别在catalina.sh文件的# OS specific support. 上面面增加export JAVA_HOME=/soft/jdk1.8`:

...
#   USE_NOHUP       (Optional) If set to the string true the start command will
#                   use nohup so that the Tomcat process will ignore any hangup
#                   signals. Default is "false" unless running on HP-UX in which
#                   case the default is "true"
# -----------------------------------------------------------------------------

export JAVA_HOME=/soft/jdk1.8

# OS specific support.

可以使用vi 编辑器编辑文件,也可以在本地配置好后再上传替换原来文件。

2.2 方式二:跟随系统环境变量

在Linux环境中配置环境变量需要配置java_home、path、classpath三个变量。
修改/etc目录中的profile文件,假定jdk的路径为:/soft/jdk1.8,在文件最后添加:

JAVA_HOME=/soft/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

按Esc键后输入 :wq ,回车保存。
保存后执行:source /etc/profile — 使环境配置生效
执行java -version可以查看目前jdk的版本。

有些电脑安装了jdk,没有配置环境变量也可以查看jdk版本,Tomcat也可以正常运行,是因为使用了rpm安装,在use/bin下建立了软连接,系统可以自动识别到,不需要另外手动配置,压缩包加压的路径系统不能识别。

3 推荐配置

3.1 内存推荐配置

Tomcat默认内存一般都比较小,程序运行时会出现内存溢出的现象,需要调整允许使用的最大内容。
在Tomcat的bin目录中修改catalina.sh文件,文件中添加:


export JAVA_HOME=/soft/jdk1.8

export JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx4096m -XX:MetaspaceSize=384m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=4 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=20 -XX:NewRatio=2 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../dump/"

# OS specific support.

如果是tomcat10.x及以上版本,”-XX:+UseG1GC” 建议改为 “-XX:+UseZGC”

内存溢出一般有两种情况:

1. java.lang.OutOfMemoryError: PermGen space
2. java.lang.OutOfMemoryError: Java heap space

第一种情况是MaxMetaspaceSize配置太小了,可以将此参数设置调大。
第二种情况是JVM可以调配使用的内存空间太小了,需要调整-Xmx参数值。服务报错时需要查看日志,看看是那种情况导致出错。

注意:JAVA_OPTS设置的内容要使用双引号括起来。

3.2 线程推荐配置

Tomcat最小线程数默认是5,最大线程数默认为200,用户并发执行较多时可能导致一些操作失败,就需要配置Tomcat的线程池和连接器。
在Tomcat的conf目录修改server.xml文件。设置线程池:

 <Executor name="tomcatThreadPool"
        namePrefix="tomcatThreadPool-"
        maxThreads="800"
        maxIdleTime="300000"
        prestartminSpareThreads="true"
        minSpareThreads="100"/>

name:共享线程池的名字;
namePrefix: 运行线程在线程池中名称的前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的配置就没效果了;
minSpareThreads:线程池中保持的最小线程数,最小值是25,建议适当配大到200左右;
maxThreads:最大线程数,每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务容器可以同时处理多少个请求。maxThreads默认200,肯定建议增加。但是,增加线程是有成本的,更多的线程,不仅仅会带来更多的线程上下文切换成本,而且意味着带来更多的内存消耗。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。线程数的经验值为:1核2g内存为200,线程数经验值200;4核8g内存,线程数经验值800。
maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于minSpareThreads),单位是ms,默认值60000(1分钟);
minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

设置连接器:

<Connector port="8091" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
      connectionTimeout="20000"
      keepAliveTimeout="60000"
      acceptCount="1000"
      maxConnections="10000"
      enableLookups="false"
      useBodyEncodingForURI="true" />

protocol:网络通讯协议,建议通讯模式BIO修改为NIO,提高并发处理能力。Tomcat 8、9等高版本 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol;其他低版本设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
maxConnections:最大连接数,这个参数是指在同一时间,tomcat能够接受的最大连接数。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxthreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000。
说明:一般情况下也可以不设置连接器,默认使用线程池配置。如果要配置连接器,需要注意 port=”8080”这个端口需要可Tomcat访问端口一直。

3.3 开放https配置

在Tomcat的server.xml文件的 Connector 中增加以下配置:

scheme=”https” secure=”true”

例如:

<Connector port="8091" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
      connectionTimeout="20000"
      keepAliveTimeout="60000"
      acceptCount="1000"
      maxConnections="10000"
      enableLookups="false"
      useBodyEncodingForURI="true"
      scheme="https"
      secure="true"
/>
作者:柳杨  创建时间:2023-06-16 11:23
最后编辑:柳杨  更新时间:2025-04-22 15:31