Tomcat配置与调优
Tomcat集群
Session复制配置方法
- 在Tomcat的conf/server.xml 配置如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
- 在Tomcat部署的应用程序 servlet_demo01 的web.xml 中加入如下配置 :
<distributable/>
注意
- 上述方案,适用于较小的集群环境(节点数不超过 4个)
- 如果集群的节点数比较多的话,通过这种广播的形式来完成Session的复制,会消耗大量的网络带宽,影响服务的性能。
Tomcat 安全
配置安全
- 删除webapps目录下的所有文件,禁用tomcat管理界面;
- 注释或删除tomcat-users.xml文件内的所有用户权限;
- 更改关闭tomcat指令或禁用
- tomcat的server.xml中定义了可以直接关闭 Tomcat 实例的管理端口(默认8005)。可以通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。
- 由于默认关闭Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。
方案一:更改端口号和指令: <Server port="8456" shutdown="itcast_shut">
方案二: 禁用8005端口: <Server port="‐1" shutdown="SHUTDOWN">
- 定义错误页面
- 在webapps/ROOT目录下定义错误页面 404.html,500.html;
- 用户在访问资源时出现404,500这样的异常,就能看到我们自定义的错误页面,而不会看到异常的堆栈信息,提高了用户体验,也保障了服务的安全性。
- 然后在tomcat/conf/web.xml中进行配置 , 配置错误页面:
<error‐page><error‐code>404</error‐code><location>/404.html</location> </error‐page> <error‐page><error‐code>500</error‐code><location>/500.html</location> </error‐page>
应用安全
- 实现自己的安全管理模块(权限模块),用于控制应用系统的安全访问
- 包含两个部分:认证(登录/单点登录)和授权(功能权限、数据权限)两个部分
- 对于业务系统,做一套适用于自己业务系统的权限模块,也有很多的应用系统直接使用一些功能完善的安全框架,将其集成到web应用中,如:SpringSecurity、Apache Shiro等。
传输安全
Tomcat支持HTTPS
生成秘钥库文件。
keytool ‐genkey ‐alias tomcat ‐keyalg RSA ‐keystore tomcatkey.keystore
输入对应的密钥库密码, 秘钥密码等信息之后,会在当前文件夹中出现一个秘钥库文件:tomcatkey.keystore将秘钥库文件 tomcatkey.keystore 复制到tomcat/conf 目录下。
配置tomcat/conf/server.xml
<Connector port="8443"protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" schema="https" secure="true" SSLEnabled="true"><SSLHostConfig certificateVerification="false"><CertificatecertificateKeystoreFile="D:/DevelopProgramFile/apache‐tomcat‐8.5.42‐windows‐x64/apache‐tomcat‐8.5.42/conf/tomcatkey.keystore"certificateKeystorePassword="yzx" type="RSA" /></SSLHostConfig> </Connector>
访问Tomcat ,使用https协议。
Tomcat性能调优
JVM参数调优
Tomcat是一款Java应用,JVM的配置便与其运行性能密切相关,JVM优化的重点在内存分配和GC策略的调整上,因为内存会直接影响服务的运行效率和吞吐量,JVM垃圾回收机制则会不同程度地导致程序运行中断。
根据应用程序的特点,选择不同的垃圾回收策略,调整JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改善程序运行性能。
JVM内存参数:
- -server:启动Server,以服务端模式运行,服务端模式建议开启
- -Xms :最小堆内存,建议与-Xmx设置相同
- -Xmx :最大堆内存,建议设置为可用内存的80%
- -XX:MetaspaceSize :元空间初始值
- -XX:MaxMetaspaceSize:元空间最大内存 默认无限
- -XX:MaxNewSize :新生代最大内存 默认16M
- -XX:NewRatio:年轻代和老年代大小比值,取值为整数,默认为2,不建议修改
- -XX:SurvivorRatio:Eden区与Survivor区大小的比值,取值为整数,默认为8,不建议修改
调优前后及对比
调优前Tomcat默认垃圾回收器
JVM调优
vi bin/catalina.shJAVA_OPTS="-server -Xms2g -Xmx2g -XX:MetaSpaceSize=256m -XX:MaxMetaSpaceSize=528m -XX:SurvivorRatio=8 -XX:USEConcMarkSweepGC -XX:+PrintGCDetails“
调优后
Tomcat配置调优
调整conf/server.xml中的连接器的配置maxThreads:池中最大线程数。
- maxConnections:最大连接数,CPU密集型建议不要过高,CPU运算不密集的建议建议2000左右
- acceptCount:最大等待数 多余的请求会放到等待队列(连接数=maxConnections+acceptCount,还多的会被拒绝)
- maxThreads:最大线程数,根据硬件决定
<Connector port="8080" protocol="HTTP/1.1"redirectPort="8443" connectionTimeout="20000"URIEncoding="UTF‐8"maxConnections="1000"acceptCount="200"maxThreads="500" />
Tomcat自带监控工具
tomcat-users.xml
- 该配置文件中,主要配置的是Tomcat的用户,角色等信息,用来控制Tomcat中manager, host-manager的访问权限。
- 从早期的Tomcat版本开始,就提供了Web版的管理控制台,他们是两个独立的Web应用,位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的host-manager和用于管理Web应用的manager。
host-manager
Tomcat启动之后,可以通过 http://localhost:8080/host-manager/html 访问该Web应用。
host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码(conf/tomcat-users.xml中配置) 。
所以要想访问该页面,需要在conf/tomcat-users.xml 中配置,并分配对应的角色:
<role rolename="admin‐gui"/> <role rolename="admin‐script"/> <user username="yzx" password="yzx" roles="admin‐script,admin‐gui"/>
admin-gui:用于控制页面访问权限
admin-script:用于控制以简单文本的形式进行访问
manager
- manager 的访问地址为 http://localhost:8080/manager
- manager也添加了页面访问控制,因此我们需要为登录用户分配角色
<role rolename="manager‐gui"/> <role rolename="manager‐script"/> <user username="yzx" password="yzx" roles="admin‐script,admin‐gui,manager‐gui,manager‐script"/>
Tomcat核心配置server.xml
server.xml 是tomcat 服务器的核心配置文件,包含了Tomcat的 Servlet 容器(Catalina)的所有配置
- Tomcat的server.xml配置文件符合Container 结构
<Server><Service> <Connector/><Connector/><Engine><Host><Context></Context></Host></Engine></Service> </Server>
Server
- 配置
<Server port="8005" shutdown="SHUTDOWN"> ... </Server>
- Server是server.xml的根元素,用于创建一个Server实例,默认使用的实现类是org.apache.catalina.core.StandardServer。
- 子元素
- port : Tomcat 监听的关闭服务器的端口。
- shutdown: 关闭服务器的指令字符串。
Server子标签
Listener:监听器(默认5种)
<!‐‐ 用于以日志形式输出服务器 、操作系统、JVM的版本信息 ‐‐> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /><!‐‐ 用于加载(服务器启动) 和 销毁 (服务器停止) APR。 如果找不到APR库, 则会输出日志, 并不影响Tomcat启动 ‐‐> <Listener className="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" /><!‐‐ 用于避免JRE内存泄漏问题 ‐‐> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><!‐‐ 用户加载(服务器启动) 和 销毁(服务器停止) 全局命名服务 ‐‐> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><!‐‐ 用于在Context停止时重建Executor 池中的线程, 以避免ThreadLocal 相关的内存泄漏 ‐‐> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
GlobalNamingResources:定义了全局命名服务
<!‐‐ Global JNDI resourcesDocumentation at /docs/jndi‐resources‐howto.html ‐‐> <GlobalNamingResources><!‐‐ Editable user database that can also be used byUserDatabaseRealm to authenticate users‐‐><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat‐users.xml" /> </GlobalNamingResources>
Service
<Service name="Catalina"> ... </Service>
- 一个Server服务器,可以包含多个Service服务。
- 默认使用 org.apache.catalina.core.StandardService。
- 默认情况下,Tomcat 仅指定了Service 的名称, 值为 “Catalina”。
Service子标签
Listener: 用于为Service添加生命周期监听器
Executor:用于配置Service 共享线程池(Service 默认并未添加共享线程池配置,如果不配置共享线程池,那么会给每个Connecto都独立创建一个线程池。)
<Executor name="tomcatThreadPool" #线程池名称,用于 Connector中指定。 namePrefix="catalina‐exec‐" #所创建的每个线程的名称前缀,一个单独的线程名称为namePrefix+threadNumber。 maxThreads="200" #池中最大线程数。 minSpareThreads="100" #活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。 maxIdleTime="60000" #线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。 maxQueueSize="Integer.MAX_VALUE" #在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。 prestartminSpareThreads="false" #启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。 threadPriority="5" #线程池中线程优先级,默认值为5,值从1到10。 className="org.apache.catalina.core.StandardThreadExecutor" #线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。#如果想使用自定义线程池首先需要实现org.apache.catalina.Executor接口。 />
Connector: 用于配置Service 包含的链接器(默认情况下,server.xml 配置了两个链接器,分别支持HTTP协议、AJP协议。大多数情况下不需要新增链接器配置,只根据需要对已有链接器进行优化)
<Connector port="8080" #端口号,Connector 用于创建服务端Socket 并进行监听, 以等待客户端请求链接。如果该属性设置为0,# Tomcat将会随机选择一个可用的端口号给当前Connector使用。protocol="HTTP/1.1" #当前Connector 支持的访问协议。 默认为 HTTP/1.1 , 并采用自动切换机制选择一个基于 #JAVA NIO 的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定)。#如果不希望采用上述自动切换的机制, 而是明确指定协议, 可以使用以下值。#Http协议:# org.apache.coyote.http11.Http11NioProtocol , 非阻塞式 Java NIO 链接器# org.apache.coyote.http11.Http11Nio2Protocol , 非阻塞式 JAVA NIO2 链接器 # org.apache.coyote.http11.Http11AprProtocol , APR 链接器 #AJP协议 # org.apache.coyote.ajp.AjpNioProtocol , 非阻塞式 Java NIO 链接器# org.apache.coyote.ajp.AjpNio2Protocol ,非阻塞式 JAVA NIO2 链接器 # org.apache.coyote.ajp.AjpAprProtocol , APR 链接器 connectionTimeout="20000" #Connector 接收链接后的等待超时时间, 单位为 毫秒。 -1 表示不超时。redirectPort="8443" #当前Connector 不支持SSL请求, 接收到了一个请求, 并且也符合security-constraint 约束, 需要SSL传输,Catalina自动将请求重定向到指定的端口。/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
其余属性说明:
- executor : 指定共享线程池的名称, 也可以通过maxThreads、minSpareThreads等属性配置内部线程池。
- URIEncoding : 用于指定编码URI的字符编码, Tomcat8.x版本默认的编码为 UTF-8 ,Tomcat7.x版本默认为ISO-8859-1。
- maxConnections:最大连接数,建议2000左右
- acceptCount:最大等待数(连接数=maxConnections+acceptCount,还多的会被拒绝)
- maxThreads:最大线程数
<Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"maxThreads="1000" minSpareThreads="100" acceptCount="1000" maxConnections="1000" connectionTimeout="20000"compression="on" compressionMinSize="2048" disableUploadTimeout="true" redirectPort="8443" URIEncoding="UTF‐8" />
Engine:用于配置Service中链接器对应的Servlet 容器引擎
<Engine name="Catalina" defaultHost="localhost">... </Engine>
子元素:
- name: 用于指定Engine 的名称, 默认为Catalina 。该名称会影响一部分Tomcat的存储路径(如临时文件)。
- defaultHost : 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交由默认的虚拟主机处理, 默认为localhost。
Engine子标签
- Host:Host 元素用于配置一个虚拟主机
<Host name="localhost" appBase="webapps" unpackWARs="true"autoDeploy="true">... </Host>
属性说明:
- name: 当前Host通用的网络名称, 必须与DNS服务器上的注册信息一致。 Engine中包含的Host必须存在一个名称与Engine的defaultHost设置一致。
- appBase: 当前Host的应用基础目录, 当前Host上部署的Web应用均在该目录下(可以是绝对目录,相对路径)。默认为webapps。
- unpackWARs: 设置为true, Host在启动时会将appBase目录下war包解压为目录。设置为false, Host将直接从war文件启动。
- autoDeploy: 控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用。
- 如果在Engine下配置Realm, 那么此配置将在当前Engine下的所有Host中共享。 同样,如果在Host中配置Realm , 则在当前Host下的所有Context中共享。
- Context中的Realm优先级 > Host 的Realm优先级 > Engine中的Realm优先级。
Host子标签
Alias:给 Host添加别名(可以实现同一个Host拥有多个网络名称)
<Host name="www.web1.com" appBase="webapps" unpackWARs="true"autoDeploy="true"><Alias>www.web2.com</Alias> </Host>
Context:配置一个Web应用,默认的配置如下
<Context docBase="myApp" path="/myApp">.... </Context>
属性描述:
- docBase:Web应用目录或者War包的部署路径。可以是绝对路径,也可以是相对于Host appBase的相对路径。
- path:Web应用的Context 路径。如果我们Host名为localhost, 则该web应用访问的根路径为: http://localhost:8080/myApp。
- 支持的内嵌元素为:CookieProcessor, Loader, Manager,Realm,Resources,WatchedResource,JarScanner,Valve。
<Host name="www.tomcat.com" appBase="webapps" unpackWARs="true" autoDeploy="true"><Context docBase="D:\servlet_project03" path="/myApp"></Context> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /> </Host>
Tomcat配置与调优相关推荐
- Springboot内置Tomcat配置参数调优
Springboot内置Tomcat配置参数调优,首先,线程数是一个重点,每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请 ...
- 1、Tomcat 9安装、配置与调优--CentOS 7
1.安装亚马逊JDK1.8 亚马逊JDK: https://docs.aws.amazon.com/corretto/index.html CLI for Linux: wget https://co ...
- Nginx安装/负载均衡/反向代理配置与调优
[Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...
- php+php-fom+nginx配置参数调优详解
文章目录 一.前言 1.mysql配置参数: 2.注意 二.php参数配置及讲解 1.phpini的基本设置 2.php参数设置 三.php-fpm设置 1.设置子进程数,增加并发量 2.防止频繁出现 ...
- 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优
1 安装配置Oracle 9i数据库 本章描述内容如下所示: 1.1 安装前的准备工作 介绍在安装Oracle之前所需的准备工作. 1.2安装前的系统设置 介绍在安装Oracle之前所必须的系统设置. ...
- tomcat原理及调优
TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的S ...
- SpringBoot中Web容器配置和调优
SpringBoot的启动容器主要是Tomcat,Jetty,Undertow三种容器类型,具体的配置类为 org.springframework.boot.autoconfigure.web.Ser ...
- RAID磁盘阵列配置和调优小结
前言 RAID解释我偷个小懒引用WikipediA,独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant ...
- 医院私有云存储的规划、配置、调优工程实例
一.项目背景介绍 二.建设目标 三.IBM 解决方案 3.1 方案架构 3.1.1 物理拓扑图 3.1.2 逻辑图 3.1.3 存储规划建议 3.2 方案特点 3.2.1 实现存储资源池化 3.2.2 ...
最新文章
- 计算机视觉:值得一读的五本计算机视觉教科书
- 服务器linux系统支持php好,关于Linux服务器系统的七大优势,你知道几个?
- 无法打开caffe.pb.h, no such file or directory错误
- oracle命中率sql,Oracle 检查命中率的SQL
- BIM工程信息管理系统-详细设计
- 显卡bind 驱动 linux,Linux 配置bind 服務
- Python+OpenCV:摄像机标定(Camera Calibration)
- jstl中的日期格式化
- Codeforces Round #439 (Div. 2)题解
- grdraw用法 lisp_AutoCAD 2000 Visual LISP开发
- java中 获取classpath路径
- Geohot使用绿雨的BETA4越狱iPhone4 4.1固件详细教程
- 自定义List对象集合排序
- 电量分析 —— 优化耗电
- 【Cad To Excel】CAD中表格到EXCEL的转换
- 利用ckplayer浏览器在线播放视频并获取视频预览图方法
- 有哪些小而美的中小厂?
- JAVA生成热点图,JAVA 后端生成热力图图片返回
- 滑环在机电行业的应用
- 色差仪如何控制油漆涂层色差