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 &quot;%r&quot; %s %b" />
    </Host>
    

Tomcat配置与调优相关推荐

  1. Springboot内置Tomcat配置参数调优

    Springboot内置Tomcat配置参数调优,首先,线程数是一个重点,每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请 ...

  2. 1、Tomcat 9安装、配置与调优--CentOS 7

    1.安装亚马逊JDK1.8 亚马逊JDK: https://docs.aws.amazon.com/corretto/index.html CLI for Linux: wget https://co ...

  3. Nginx安装/负载均衡/反向代理配置与调优

    [Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...

  4. php+php-fom+nginx配置参数调优详解

    文章目录 一.前言 1.mysql配置参数: 2.注意 二.php参数配置及讲解 1.phpini的基本设置 2.php参数设置 三.php-fpm设置 1.设置子进程数,增加并发量 2.防止频繁出现 ...

  5. 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优

    1 安装配置Oracle 9i数据库 本章描述内容如下所示: 1.1 安装前的准备工作 介绍在安装Oracle之前所需的准备工作. 1.2安装前的系统设置 介绍在安装Oracle之前所必须的系统设置. ...

  6. tomcat原理及调优

    TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的S ...

  7. SpringBoot中Web容器配置和调优

    SpringBoot的启动容器主要是Tomcat,Jetty,Undertow三种容器类型,具体的配置类为 org.springframework.boot.autoconfigure.web.Ser ...

  8. RAID磁盘阵列配置和调优小结

    前言 RAID解释我偷个小懒引用WikipediA,独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant ...

  9. 医院私有云存储的规划、配置、调优工程实例

    一.项目背景介绍 二.建设目标 三.IBM 解决方案 3.1 方案架构 3.1.1 物理拓扑图 3.1.2 逻辑图 3.1.3 存储规划建议 3.2 方案特点 3.2.1 实现存储资源池化 3.2.2 ...

最新文章

  1. 计算机视觉:值得一读的五本计算机视觉教科书
  2. 服务器linux系统支持php好,关于Linux服务器系统的七大优势,你知道几个?
  3. 无法打开caffe.pb.h, no such file or directory错误
  4. oracle命中率sql,Oracle 检查命中率的SQL
  5. BIM工程信息管理系统-详细设计
  6. 显卡bind 驱动 linux,Linux 配置bind 服務
  7. Python+OpenCV:摄像机标定(Camera Calibration)
  8. jstl中的日期格式化
  9. Codeforces Round #439 (Div. 2)题解
  10. grdraw用法 lisp_AutoCAD 2000 Visual LISP开发
  11. java中 获取classpath路径
  12. Geohot使用绿雨的BETA4越狱iPhone4 4.1固件详细教程
  13. 自定义List对象集合排序
  14. 电量分析 —— 优化耗电
  15. 【Cad To Excel】CAD中表格到EXCEL的转换
  16. 利用ckplayer浏览器在线播放视频并获取视频预览图方法
  17. 有哪些小而美的中小厂?
  18. JAVA生成热点图,JAVA 后端生成热力图图片返回
  19. 滑环在机电行业的应用
  20. 色差仪如何控制油漆涂层色差

热门文章

  1. vivado+vscode
  2. 面经:2020校招中兴提前批面试经历
  3. RDD论文翻译:基于内存的集群计算容错抽象
  4. Luminati LPM在Linux下安装教程
  5. c语言在打开文件时会使用到的函数,C语言打开文件操作
  6. 企业邮箱退信提示:“550 5.1.1 User unknown.”
  7. Android软键盘工具类
  8. Python数据分析实战【十二】:机器学习决策树算法案例实战【文末源码地址】
  9. J2EE体系架构设计
  10. libxml2常用库函数详解