Tomcat 部署及优化

发布时间 2023-09-09 09:47:12作者: Candy独角兽

Tomcat 部署及优化

1.1 概述

  • Java语言开发的一款开放源代码的、免费的web应用服务程序
  • 轻量级应用服务器,中小型系统和并发访问用户不是很多的场合下普通使用

作用:

  1. 可以作为web应用服务器,处理静态web页面,如html页面,但性能一般
  2. 还可以作为Servlet/JSP容器,运行在后端,处理java语言开发的jsp动态页面应用程序,这也是tomcat主要的应用场景

1.2 Tomcat 核心组件

  • Web 容器:完成Web服务器的功能
  • Servlet 容器:名字为 catalina,用于处理 Servlet 代码
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码

1.2.1 什么是Servlet?(JSP代码进行解释、转换、运行)

  • Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

1.2.2 什么是 JSP?(动态页面实现)

  • JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HML网页中插 Java 代码。标签通常以 <% 开头,以 %> 结束。
  • JSP是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
  • JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

1.3 Tomcat 功能组件结构

  • Connector连接器:暴露监听端口,接收客户端发来的请求和返回响应消息给客户端

  • Container容器:负责处理用户请求的业务逻辑。由四个子容器组成(Engine、Host、Context、Wrapper),子容器之间是父子关系

    • Engine:引擎,管理多个虚拟主机,一个Service最多一个Engine
    • Host:代表一个虚拟主机
    • Context:管理web应用的路径
    • Wrapper:servlet封装器,负责处理业务逻辑

1.4 Tomcat 处理请求过程

客户端请求过程:

  1. 客户端浏览器 —> connector暴露的8080端口
  2. —> container(engine)根据域名发送给对应的虚拟主机
  3. —> host 根据用户访问的URL路径
  4. —> context 根据URL路径对应的web应用
  5. —> wrapper 根据应用程序处理业务逻辑

1.5 Tomcat 多实例部署

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

3.设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile.d/java.sh
java -version

4.安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh 

netstat -natp | grep 8080

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target

5.浏览器访问Tomcat的默认主页 http://192.168.8.100:8080

1.6 Tomcat 优化

tomcat优化:

  • 配置文件优化
maxThreads(最大线程数/并发)  
processorCache(进程缓冲) 
accecptCount(等待队列数) 
enableLookups(关闭DNS反向解析) 
URIEncoding(网页字符集编码UTF-8) 
maxKeepAliveRequests(长连接最大请求数) 
connectionTimeout(连接超时时间) 
compression(开启页面压缩)
  • 系统内核优化
vim /etc/security/limits.conf
nofile、nproc、memlock

vim /etc/sysctl.conf
net.ipv4.tcp_syncookies= 1
net.ipv4.tcp_tw reuse= 1
net.ipv4.tcp_tw_recycle= 1 
net.ipv4.tcp fin timeout= 30

net.ipv4.tcp keepalive time= 1200
net.ipv4.ip_local_port_range= 1024 65535
net.ipv4.tcp_max_syn backlog= 8192
net.ipv4.tcp max tw buckets= 5000
  • JVM优化
在 catalina.sh 中设置 JAVA_OPTS 参数

JAVA OPTS="$JAVA OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m"
-server   #表示启用JDK的Server模式,实现在多核服务器性能更佳

-Xms2048m -Xmx2048m  #设置JVM堆内存初始值和最大值一样大,一般设置为物理内存的1/2

-XX:PermSize=1024m -XX:MaxPermSize=1024m  #设置永久代(非堆内存)初始值和最大值一样大,一般设置为物理内存的1/4

初始值和最大值设置一样大的原因:可以减少GC次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销。

-Xmn #设置JVM堆内存新生代的大小,一般设置为堆内存的3/8
-XX:ParallelGCThreads=2  #设置并行GC(垃圾回收)线程数,提高垃圾回收效率

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof
#设置进程发生OOM异常退出会进行DUMP备份

-XX:+DisableExplicitGC #禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低