Tomcat 对 HTTPS 的⽀持

Https简介

Https是⽤来加强数据传输安全的
image.png

  • Http超⽂本传输协议,明⽂传输 ,传输不安全,https在传输数据的时候会对数据进⾏加密
  • ssl协议
  • TLS(transport layer security)协议 (tcp)

    HTTPS和HTTP的主要区别

  • HTTPS协议使⽤时需要到电⼦商务认证授权机构(CA)申请SSL证书

  • HTTP默认使⽤8080端⼝,HTTPS默认使⽤8443端⼝
  • HTTPS则是具有SSL加密的安全性传输协议,对数据的传输进⾏加密,效果上相当于HTTP的升级版
  • HTTP的连接是⽆状态的,不安全的;HTTPS协议是由SSL+HTTP协议构建的可进⾏加密传输、身份认证的⽹络协议,⽐HTTP协议安全

    HTTPS⼯作原理

    image.png

    Tomcat 对 HTTPS 的⽀持

    1) 使⽤ JDK 中的 keytool ⼯具⽣成免费的秘钥库⽂件(证书)。

    1. keytool -genkey -alias test -keyalg RSA -keystore test.keystore

    image.png
    2) 配置conf/server.xml

    1. <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    2. maxThreads="150" schema="https" secure="true" SSLEnabled="true">
    3. <SSLHostConfig>
    4. <Certificate
    5. certificateKeystoreFile="/Users/yingdian/workspace/servers/apache-tomcat-
    6. 8.5.50/conf/lagou.keystore" certificateKeystorePassword="lagou123" type="RSA"
    7. />
    8. </SSLHostConfig>
    9. </Connector>

    3)使⽤https协议访问8443端⼝(https://localhost:8443)。
    image.png

    Tomcat 性能优化策略

    系统性能的衡量指标,主要是响应时间和吞吐量。
    1)响应时间:执⾏某个操作的耗时;
    2) 吞吐量:系统在给定时间内能够⽀持的事务数量,单位为TPS(Transactions PerSecond的缩写,也就是事务数/秒,⼀个事务是指⼀个客户机向服务器发送请求然后服务器做出反应的过程。
    Tomcat优化从两个⽅⾯进⾏
    1)JVM虚拟机优化(优化内存模型)
    2)Tomcat⾃身配置的优化(⽐如是否使⽤了共享线程池?IO模型?)
    学习优化的原则
    提供给⼤家优化思路,没有说有明确的参数值⼤家直接去使⽤,必须根据⾃⼰的真实⽣产环境来进⾏调
    整,调优是⼀个过程。

    虚拟机运⾏优化(参数调整)

    Java 虚拟机的运⾏优化主要是内存分配和垃圾回收策略的优化:

  • 内存直接影响服务的运⾏效率和吞吐量

  • 垃圾回收机制会不同程度地导致程序运⾏中断(垃圾回收策略不同,垃圾回收次数和回收效率都是不同的)

image.png

JVM内存模型回顾

image.png
最小堆内存和最大堆内存保持一致,调整为可用内存的80%,调整内存大小也是需要耗费性能的。
-server以服务器端的形式启动,启动会慢,但是运行会快。

示例

  1. JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

放入tomcat中的
image.png
调整后查看可使⽤JDK提供的内存映射⼯具(只有jdk9 之后才有的)
先查看pidimage.png

  1. jhsdb jmap --heap --pid

image.png

垃圾回收(GC)策略

垃圾回收性能指标

  • 吞吐量:⼯作时间(排除GC时间)占总时间的百分⽐, ⼯作时间并不仅是程序运⾏的时间,还包含内存分配时间。
  • 暂停时间:由垃圾回收导致的应⽤程序停⽌响应次数/时间。

    垃圾收集器

  • 串⾏收集器(Serial Collector)

单线程执⾏所有的垃圾回收⼯作, 适⽤于单核CPU服务器
⼯作进程——-|(单线程)垃圾回收线程进⾏垃圾收集|—-⼯作进程继续

  • 并⾏收集器(Parallel Collector)

⼯作进程——-|(多线程)垃圾回收线程进⾏垃圾收集|—-⼯作进程继续
⼜称为吞吐量收集器(关注吞吐量), 以并⾏的⽅式执⾏年轻代的垃圾回收, 该⽅式可以显著降
低垃圾回收的开销(指多条垃圾收集线程并⾏⼯作,但此时⽤户线程仍然处于等待状态)。适⽤于多
处理器或多线程硬件上运⾏的数据量较⼤的应⽤

  • 并发收集器(Concurrent Collector)

以并发的⽅式执⾏⼤部分垃圾回收⼯作,以缩短垃圾回收的暂停时间。适⽤于那些响应时间优先于吞吐量的应⽤, 因为该收集器虽然最⼩化了暂停时间(指⽤户线程与垃圾收集线程同时执⾏,但不⼀定是并⾏的,可能会交替进⾏), 但是会降低应⽤程序的性能

  • CMS收集器(Concurrent Mark Sweep Collector)

并发标记清除收集器, 适⽤于那些更愿意缩短垃圾回收暂停时间并且负担的起与垃圾回收共享处
理器资源的应⽤

  • G1收集器(Garbage-First Garbage Collector)

适⽤于⼤容量内存的多核服务器, 可以在满⾜垃圾回收暂停时间⽬标的同时, 以最⼤可能性实现
⾼吞吐量(JDK1.7之后)

垃圾回收器参数

image.png
使用jconsole进行查看 垃圾收集器用的哪个
image.png
G1收集器是在1.9之后的 默认收集器
1.8默认为图上收集器

Tomcat 配置调优

Tomcat⾃身相关的调优

  • 调整tomcat线程池

image.png

  • 调整tomcat的连接器

调整tomcat/conf/server.xml 中关于链接器的配置可以提升应⽤服务器的性能。
image.png

  • 禁⽤ A JP 连接器

image.png

  • 调整 IO 模式

Tomcat8之前的版本默认使⽤BIO(阻塞式IO),对于每⼀个请求都要创建⼀个线程来处理,不适
合⾼并发;Tomcat8以后的版本默认使⽤NIO模式(⾮阻塞式IO)
image.png
当Tomcat并发性能有较⾼要求或者出现瓶颈时,我们可以尝试使⽤APR模式,APR(Apache Portable
Runtime)是从操作系统级别解决异步IO问题,使⽤时需要在操作系统上安装APR和Native(因为APR
原理是使⽤使⽤JNI技术调⽤操作系统底层的IO接⼝)

  • 动静分离

可以使⽤Nginx+Tomcat相结合的部署⽅案,Nginx负责静态资源访问,Tomcat负责Jsp等动态资
源访问处理(因为Tomcat不擅⻓处理静态资源)。