Tomcat

1 架构

1.1 Http工作原理

image.png

1.2 整体架构

Tomcat要实现两个核心功能:

  1. 处理Socket连接,负责网络字节流与Request和Response对象的转化。
  2. 加载和管理Servlet,以及具体处理Request请求。

因此Tomcat设计了两个核心组件:连接器(Connecter)和容器(Container)来分别做这两件事。连接器负责对外交流,容器负责内部处理。

image.png

1.3 连接器 - Coyote

Coyote是Tomcat连接器框架的名称,是Tomcat提供的供客户端访问的外部接口。Coyote封装了底层的网络通信(Socket请求及相应处理),为Catalina容器提供了统一的接口,使Catalina容器与具体的请求协议与IO操作方式完全解耦。Coyote只负责具体协议和IO的相关操作,与Servlet规范实现没有直接关系。

image.png

在 8.0之前,Tomcat默认采用的I/O方式为BIO,之后改为NIO。
通过适配器模式,将Request请求转换为ServletRequest。

1.4 容器 - Cataline(Servlet容器)

负责解析Tomcat的配置文件,以此来创建服务器Server组件,并根据命令来对其进行管理。

image.png

1.5 Tomcat的启动流程

标准化启动流程,统一按照生命周期管理接口Lifecycle的定义启动。首先调用init()方法进行组件的逐级初始化操作,然后再调用start()方法进行启动。

image.png

2 Tomcat 安全

2.1 配置安全

  1. 删除webapps目录下的所有文件,禁用tomcat管理界面
  2. 注释或者删除tomcat-users.xml文件内的所有用户权限
  3. 更改关闭tomcat指令或禁用
    tomcat的server.xml中定义了可以直接关闭tomcat实例的管理端口(默认8005),远程连接该端口后输入SHUTDOWN后即可关闭tomcat。
    方案一:
#更改端口号和指令,改成不容易猜到的
<Server port="8234" shutdown="shutnodown">

方案二:

#禁用8005端口
<Server port="-1" shutdown="shutnodown">

2.2 应用安全

主要包含两个部分:认证(登录/单点登录)和授权(功能权限、数据权限)两个部分。可以自己做一套适用于自己业务系统的权限模块,也可以使用功能完善的安全框架,如:SpringSecurity、Shiro等。

2.3 传输安全

2.3.1 https介绍

使用https超文本安全传输协议。在http的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。

SSL和TLS是用于网络通信安全的加密协议,允许客户端和服务器之间通过安全链接通信。SSL协议的3个特性:

  1. 保密:通过SSL链接传输的数据时加密的。
  2. 鉴别:通过双方的身份鉴别,通常是可选的,单至少有一方需要验证。
  3. 完整性:传输数据的完整性检查。
    从性能考虑,加解密是一项昂贵的处理,因为尽量不要将整个Web应用采用SSL链接,实际部署中,选择有必要进行安全加密的页面采用SSL通信。

http和https区别主要有以下4点:

  1. https协议需要到证书颁发机构CA申请SSL证书,然后与域名进行绑定,http不用申请证书。
  2. http是超文本传输协议,属于应用层信息传输,https则是具有SSL加密安全性传输协议,对数据的传输进行加密。
  3. http和https使用的是完全不同的连接方式,端口也不同。
  4. http连接简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https协议优势:

  1. 提高网站排名,有利于SEO。
  2. 隐私信息加密,防止流量劫持。
  3. 浏览器受信任。

2.3.2

1)向相关机构申请证书
2)自己生成证书
  1. 生成密钥库文件
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
image.png
  1. 将密钥库文件tomcat.keystore复制到tomcat/conf目录下。
  2. 配置tomcat/conf/server.xml
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" schema="https" secure="true" SSLEnabled="true">
        <SSLHostConfig certificateVerification="false">
            <Certificate certificateKeystoreFile="tomcat.keystore" certificateKeystorePassword="jiongbaibai"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

3 Tomcat性能调优

3.1 性能测试

可以使用ApacheBench,ApacheJMeter等工具进行性能测试。

3.2 JVM参数调优

1.配置合适的JVM内存参数,调整GC策略。

参数 参数作用 优化建议
-server 启动Server,以服务端模式运行 服务端模式建议开启
-Xms 最小堆内存 建议与-Xmx设置相同
-Xmx 最大堆内存 建议设置成可用内存的80%
-XX:MetaspaceSize 元空间初始值
-XX:MaxMetaspaceSize 元空间最大内存 默认无限
-XX:MaxNewSize 新生代最大内存 默认16M
-XX:NewRatio 年轻代和老年代大小比值,取值为整数,默认为2 不建议修改
-XX:SurvivorRatio Eden区与Survivor区大小的比值,取值为证书,默认为8 不建议修改

修改catalina.sh,添加以下语句,值根据服务器实际情况设置

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
  1. GC策略
    JVM垃圾回收性能有以下两个主要的指标:
  • 吞吐量
    工作时间(排除GC时间)占总时间的百分比,工作时间并不仅是程序运行的时间,还包含内存分配时间
  • 暂停时间
    测试时间段内,由垃圾回收导致的应用程序停止相应次数/时间。

根据业务情况选择合适的垃圾收集器。

3.3 Tomcat配置调优

调整server.xml中关于连接器的配置可以提高Tomcat的性能。

参数 说明
maxConnections 最大连接数,当到达该值后,服务器接收但不会处理更多的请求,额外的请求将会阻塞直到连接数低于maxConnections。可通过ulimit -a 查看服务器限制。对于CPU要求更高(计算型)时,建议不要配置过大;对于CPU要求不是特别高时,建议配置在2000左右。
maxThreads 最大线程数,需要根据服务器的硬件情况,进行一个合理的设置
acceptCount 最大排队等待数,当服务器接收的请求数量达到maxConntections,此时Tomcat会将后面的请求,存放在任务队列中进行排序,acceptCount指的就是任务队列中排队等待的请求数。一台Tomcat的最大的请求处理数量,是maxConnections+acceptCount。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念 Java Web,是基于Java语言实现web服务的技术总和。介于现在Java在web客户端应用的比较少,我...
    胥垣阅读 1,477评论 0 8
  • 概述 Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet...
    jiangmo阅读 2,256评论 0 13
  • 本篇结构: 前言 什么是Coyote Coyote支持的协议及I/O方案 Coyote重要组件 总结 一、前言 T...
    w1992wishes阅读 1,306评论 0 0
  • 搭建Tomcat源码项目 下载tomcat源代码 下载地址 编写一个pom.xml 文件,给Tomcat使用。<?...
    PECINY阅读 778评论 0 0
  • 当和煦的太阳压上昏暗的地平线 当熹微的晨光迎上了大地的眼睛 我满心欢喜的期待海鸥的降临 期待它带来了你写给我的信封...
    四维怪居士阅读 677评论 3 6