tomcat

tomcat基本概念

tomcat是一个web应用,也是一种jave编译的程序

tomcat的功能组成

tomcat是由三个功能组合而成的,如下:

java servlet:tomcat是一个servlet的容器,负载管理和执行java-servlet,服务短的java程序。处理客户端的http的请求和响应。

java server:服务端的配置

pages:动态页面的技术------>java代码完成的。

  • tomcat既可以作为以java代码为基础的动态页面,也可以处理和转发动态请求。
  • tomcat的并发能力很差,适合小项目。

tomcat的核心组件

web容器:处理web的请求,影响,动态页面的展示。

jsp容器:解析Index.jsp中的java代码转换为server的代码,然后servlet编译执行。jsp是一种技术模板,类似于html语言,允许html文件当中,嵌入java的代码。

servlet容器:接受web容器的请求,负责加载,初始化,执行和管理。

tomcat的功能组件

connector:接受外部的请求以及响应

container:容器,包含了engine、host、context、webapp四个组件

service:包含了connector和container

engine:引擎,用来管理多个虚拟主机,一个service只能有一个engine

host:代表一个虚拟主机,也可以理解成为站点

context:对应的web应用

webapp:最终的封装器,容器的最底层,index.jsp

tomcat的文件目录

bin:启动和关闭的脚本文件

conf:tomcat的配置文件

logs:tomcat的日志文件

webapps:保存不同项目的应用目录

work:工作目录

temp:临时文件保存目录

安装tomcat步骤

1、apt -y install openjdk-8-jdk-headless #安装java的依赖环境

2、将准备好的tocat压缩包,解压;并将解压后的包移到/usr/local/目录下

3、到 /tomcat/bin目录下,./startup.sh启动/tomcat即可(shutdown.sh是关闭)

4、访问tomcat需要在加上他的默认端口8080,访问的页面便是tomcat的service

自定义service

1、在/tomcat/webapps/下创建访问目录和文件

两个index.jsp具体配置如下

2、配置主配置文件 /conf/server.xml,添加两个host如下,配置完之后,要./startup.sh启动

<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />

</Host>

  • Host name:主机名"www.test1.com"
  • appBase="webapps":web应用程序目录
  • unpackWARs="true":是否对.war格式结尾文件进行展开,默认展开
  • autoDeploy="true" :tomcat在运行时会自动部署webapps里面对应的配置
  • xmlValidation="false":是否验证xml文件的有效性
  • xmlNamespaceAware="false":是否启动xml的命名空间
  • Context docBase="/usr/local/tomcat/webapps/test1":用来说明对应站点的工作的目录

一定要 netstat -antp | 8080 查看有没有起来,tomcat容易假起。

3、做域名映射

4、这时候我们访问tomcat页面就是我们所作的两个index.jsp页面

tomcat的优化

默认的安装情况下,tomcat经常会假死的情况,所有tomcat需要优化。

自身配置优化

当我们登录tomcat的时候会发现,无法访问Manager App等服务,是因为权限不够。

修改/tomcat/webapps/manager/META-INF/context.xml配置文件,改成允许任意地址,如下

修改/tomcat/conftomcat-users.xml用户权限配置文件,设置账号密码都是tomcat,操作和代码如下

<role rolename="manager-gui"/>

<user username="tomcat" password="tomcat" roles="manager-gui"/>

重启tomcat后,我们便可以进入Manager App等服务,输入账号密码即可。

修改主配置文件 /conf/server.xml,在<Connectro>里面修改

  • 8080:tomcat对外提供访问的默认端口
  • protocol="HTTP/1.1":默认的协议就是http/1.1
  • connectionTimeout="20000":连接的超时时间20000毫秒=20秒
  • redirectPort="8443":如果是https,自动跳转到8443,https协议服务的

添加如下内容

  • maxThreads="500":tomcat可以创建的最大线程数
  • minSpareThreads="50":空闲线程的最小数量,用来处理溢出部分的请求
  • enableLookups="false":禁用反向解析,提高访问速度
  • disableUploadTimeout="true":开启上传的超时时间,连接在上传期间不存在超时的情况
  • acceptCount="300":当所有线程都在忙碌的时候,可以等待排队处理的请求数量
  • processorCache="500":连接器可以缓存的最大处理数量
  • URlEncoding="UTF-8":设置字符集编码
  • compression="on":开启对响应内容的压缩功能
  • compressionMinSize="2048":如果大小超过2M,才会进行压缩
  • compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/> :支持被压缩的文件类型

这时候我们重启tomcat服务后,会发现页面内容已经修改了我们设定的

内核优化

vim /etc/sysctl.conf #修改内核配置文件

添加如下所需的配置即可

net.ipv4.ip_forward=0 #开启服务数据的路由功能

net.ipv4.tcp_syncookies = 1 #启动SYN cookies功能,避免tcp SYN的攻击

net.ipv4.tcp_max_tw_buckets = 6000 #系统中允许出现的最大的time_wait的数量

net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse: 启用TIME_WAIT套接字快速回收和重用。

vm.overcommit_memory = 0: 控制内存超额分配策略,避免OOM killer杀掉进程。

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_window_scaling = 1: 启用TCP窗口缩放功能,允许大窗口的TCP传输。

net.ipv4.conf.default.accept_source_route: 不接受源路由,增加网络安全性。

kernel.sysrq = 0: 禁用了内核的sysrq功能,sysrq允许在系统崩溃或有问题时执行一些调试操作。

kernel.core_uses_pid = 1: 设置核心转储文件名中包含进程ID,有助于标识是哪个进程导致了核心转储。

kernel.msgmnb 和 kernel.msgmax: 增加IPC消息队列的默认和最大大小,用于进程间通信。

kernel.shmmax 和 kernel.shmall: 调整共享内存的最大大小和分配页面数。

jvm调优

修改 /tomcat/bin/catalina.sh 配置文件,添加如下代码

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true -XX:+DisableExplicitGC"

  • $JAVA_OPTS -server:jvm服务端的优化
  • Xms:jvm分配的最小内存
  • Xmx:jvm分配的最大内存
  • 2048m:官方建议,初始大小和最大值设置成一样的值,一般是物理内存大小的一半。
  • Xmn768m:设置新生代的内存大小,官方建议设置成整个堆内存的3/8。
  • XX:ParallelGCThreads=2:设置资源回收器的线程数量是2
  • XX:MetaspaceSize=128m:设置元空间(元:保存数据的核心信息)的初始大小
  • XX:MaxMetaspaceSize=512m:元空间的最大值
  • Djava.awt.headless=true:启用无图形界面的模式,防止在linux系统下web页面无法正常显示图片
  • XX:+DisableExplicitGC:垃圾回收机制的信息在后台显示

修改完我们可以发现tomcat网页已经修改成我们设置的

ajp-nio-8009

ajp:内部通信的协议,tomcat服务端和前端的服务器进行连接的协议,提供负载均衡和高效请求的转发。

nio:nio技术,异步非阻塞通信

8009:和前端服务器通信的端口8009

tomcat的动静分离

如下图所示,我们使用五台主机,完成动静分离,具体配置如下:

zw4:192.168.254.14(代理服务器)

zw5:192.168.254.15(前端服务器,静态页面)

zw6:192.168.254.16(后端服务器,静态页面)

tocat1:192.168.254.21(后端服务器,动态页面)

tocat2:192.168.254.22(后端服务器,动态页面)

我们实现访问代理服务器zw4,就是访问静态页面zw5和zw6;通过zw5和zw6,访问代理服务器zw4,也可以访问动态页面tocat1和tocat2。

数据流向图如下:

注意:四层代理不能处理数据,但是可以对数据包进行转发。也就是说在代理服务器zw4上做四层代理两个静态页面,再在两个静态页面上做七层代理两个动态页面,即可实现动静分离。

操作步骤

1、配置zw4的nginx主配置文件,配置四层代理zw5和zw6

配置完之后代表我们主机zw4便代理了两个静态页面

2、配置zw5和zw6的nginx主配置文件,配置七层代理tocat1和tocat2

配置完之后代表zw5和zw6便代理了两个动态页面,zw4可以通过zw5和zw6访问tocat1和tocat2

3、配置tocat1和tocat2动态页面,自定义server,具体操作如下

tocat1配置动态页面1,路径 /tomcat/webapps/test1/index.jsp

tocat2配置动态页面2,路径 /tomcat/webapps/test2/index.jsp

注意我们这边使用了localhost,这样我们就不要通过访问目录来访问tocat页面,但是上面原有的localhost的<Host>的配置要删掉。

4、这样我们便可以实现动态分离

注意:根据数据流向,我们zw4访问动态页面tomcat1和tomcat2是通过静态页面zw5和zw6访问,故一定要加上我们给zw5和zw6定义的端口号81。

相关推荐
爬菜4 分钟前
顺序表的实现
java
知兀7 分钟前
Maven
java·笔记·maven·javaweb·黑马程序员
开发者联盟league7 分钟前
eclipse rcp-创建rcp-创建target
java·ide·eclipse
V+zmm1013410 分钟前
展柜设计公司平面布置小程序的分析与设计springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Nijika...16 分钟前
RabbitMQ 基本使用方法详解
java·后端·spring·rabbitmq
合方圆~小文19 分钟前
工业现场的视频图像采集设备
java·c语言·人工智能·数码相机·物联网·信号处理
江梦寻38 分钟前
区块链赋能数字藏品设计提案
java·数据库·sql·mysql·区块链·数据库架构
m0_748255021 小时前
FlutterWeb启动耗时优化
java
NorthCastle1 小时前
设计模式-创建型模式-单例模式详解
java·单例模式·设计模式