tomcat

Tomcat

他是一个开源的web应用服务器,区别nginx,nginx主要处理静态页面,而动态请求(连接数据库,页面动态),并不是nginx处理的长处,动态请求会交给tomcat进行处理
通过nginx ----- 转发动态请求 -----tomcat

Tomcat 的功能

1

(实际工作中主要使用的功能)

处理动态页面

2

(实际工作中主要使用的功能)

处理后端请求(调用数据库服务器)
3 易部署,tomcat会自动识别配置文件,自动部署运行
4 轻量级的服务软件,一般来处理中小架构的网站可以满足,大型的交互需求就不是tomcat的长处了,有些公司会使用python,node.js,容器化来处理,在容器化部署的项目架构中是不使用tomcat的,都是用jar包直接运行,包括k8s

Tomcat的核心组件

web容器 主要是完成web功能,处理请求也是nginx转发的http(https也有)请求,处理的是一个动态的页面(它是基于java代理编译的页面),处理后端的请求(转发到数据库的请求)
servlet catalina是整个tomcat处理的底层逻辑,既处理web请求的动页面,也处理后端请求(数据库)
jsp jsp会把动态翻译成servlet的代码,用编译后的规则,显示代码的静态页面

静态页面

html

动态页面

1.php  inex.php

2.Jsp  index.jsp   ----java 格式写成的代码,靠jsp翻译,servlet执行编译的代码,最后展示结果

Servlet  jsp 解释

容器是什么

容器 容器通常指的是一种虚拟化的技术,运行在当前的操作系统中虚拟化的运行多个独立的环境,独立运行的环境就是我们说的容器,彼此之间相互隔离,拥有自己的一套系统资源,宿主,容器寄生在宿主身上,实际使用的就是宿主的资源,docker

Servlet容器

servlet容器 用于开发web应用程序的关键组件,处理http请求,生产动态内容以及客户端之间的交互,前端交互,后端数据库服务器交互,和redis缓存交互
1 处理http请求
2 生成动态页面内容
3 会话管理,可以处理用户会话,跟踪用户在不同请求之间的状态,servlet可以在用户访问不同页面时,保持用户的状态信息,购物车同步,用户同步登录等等

类:java当中,用来调用各种方法,由开发人员自定义的

Jsp

java server pages 动态页面的开发技术,使用jsp的标签可以在HTML(html)的网页当中可以插入java代码
格式

<%:开头

%>:结尾

jsp 可以实现java应用程序的访问界面(用户界面),或者访问数据库,生成页面内容

Tomcat的核心功能

功能部分由两个块组成

1. 接收和响应外部请求的连接器connector
2. 负责处理请求的container

四个工作组件

engine引擎 管理多个虚拟主机,一个tomcat里面只能有一个engine
host 代表站点,也就是虚拟机,一个engine可以有多个host
context 一个context执行一个web应用
wrapper 最底层,处理和变异代码,然后运行结果,最后层层返回上级到用户

tomcat_第1张图片

JDK:开发工具包,开发java的应用程序,jdk包括:编译器,调试器,等等以及java的类库

开发者用来创建,编译运行java程序的重要组件

Jvm:java的虚拟机,主要负责编译后的java字节码,变成本地的机器码,运行java的代码

Jvm:内存管理,垃圾回收机制,线程管理,

Tomcat文件作用

bin 存放启动或关闭tomcat的脚本文件,如startup.sh , shutdown.sh
server.Xml tomcat的主配置文件
logs catalina.out  tomcat的日志文件
webapps tomcat默认的web应用的部署目录
work tomcat的工作目录,存放jsp里面代码编译之后产生的class文件,清缓存会用到
1.systemctl stop firewalld
2.setenforce 0
#关防火墙
3.cd /opt
4.rpm -ivh jdk-8u201-linux-x64.rpm
#安装
5.java -version
6.tar -xf apache-tomcat-9.0.16 /usr/local/tomcat
#解压到 /usr/local/tomcat
7.vim /etc/profile.d/java.sh
export JAVA HOME=/usr/java/jdk1.8.0 201-amd64
#设置java home的环境变量,指向Jdk,也就是java的工作目录
export CLASSPATH=.:$JAVA HOME/ b/tools.jar:$JAVA HOME/Lib/dt.jar
#java类的搜索路径
export PATH=$JAVA HOME/bin:$PATH
#把java的可执行命令添加到系统的环境变量当中。
8.cd /usr/local/tomcat/conf
9.cd /usr/local/tomcat/bin
10.netstat -antp | grep 8080
#端口没起
11../startup.sh
#启动

启动成功

tomcat_第2张图片

Tomcat配置虚拟主机

  1. 配置工作目录
  2. 在公司当中会运行多个项目,一台部署tomcat太多会浪费资源,所以会在tomcat中配置多个主机,通过不同域名访问不同的内容
  3. 请求连接到连接器,连接的端口是8080,连接器接受请求
  4. www,kgc,com 引擎管理虚拟机----host----www,kgc,com------context---访问www,kgc,com该主机的工作目录----webapps/kgc--------index.jsp-----wrapper-----servletl来解析index.jsp内容
  5. 响应的内容返回到客户端
1.cd /usr/local/tomcat/webapps
2.mkdir kgc benet
3.vim usr/local/tomcat/webapps/kgc或benet/index.jsp
#分别进入kgc与benet目录编辑文件输入内容保存
4.echo "192.168.233.xx www.kgc.com www.benet.com"
#配置本地域名映射
5.cd /usr/local/tomcat/bin
6../shutdown.sh
7../startup.sh
#到虚拟机里打开浏览器输入:www.kgc或benet.com:8080

重点

Tomcat的优化

Tomcat不是很好用,默认配置并不适合生产环境,以默认环境运行会频繁出现假死。

需要通过压力测试不断优化,提高稳定。

优化有三个方面

  1. 配置文件优化
  2. Jvm优化
  3. 操作系统优化(内核优化)

Tomcat配置文件优化

    1. maxThreads=”200” ,

# tomcat 使用线程来处理接收的每个请求,可以创建的最大线程数,支持最大的并发连接数 200

minSpareThreads

#最小空闲线程数,tomcat启动时的初始化线程数,表示没人请求,也要打开这些空的线程等待请求10

maxSpareThreads

# 最大备用线程数,创建线程超过这个值,tomcat会关闭不再需要的线程,默认是-1(不做限制)

connnectiontimeout

#网络连接超时,一般设置为20000毫秒

enableLookups=”fals”

#是否反查反向解析域名,一般不做解析,所以写成fals,提高效率

disableUploadTimeout=”true”

#上传文件时,是否启用超时限制

connectionUploadTimeout=”15000”

#上传比下载要耗时,根据需求自定义

accpetCount=”100”

#所以得可以使用的线程都被占用,可以传入的队列长度的最大值,默认是100个等待数

compression=”on” 或”off” 或”force” (所有的情况都进行压缩),  

#是否对响应的数据进行gzip压缩,on压缩之后的页面大小可以减少1/3,

noCompressionUserAgents=”gozilla chrom” 

#对指定访问的浏览器,不进行压缩

jvm优化

tomcat_第3张图片

Xmn768m:新生代内存的大小,光放推荐整个堆大小的3/8

新生代:java中每新建一个新的对象,占用的内存就是新生代

中生代:对象创建完毕之后,占用的内存就是中生代

老年代:java垃圾回收机制进行资源回收之后,中生代中剩余的部分,就是老年代

-XX:parallelGCThreads=2

#配置并行收集器的线程数,有多少个线程一起进行垃圾回收,官方推荐,与cpu数量相同

-XX:PermSize=1024m

#设置非堆内存的初始值,持久代内存的大小,一般设置为物理内存的1/4

-XX:MaxPermSize=1024m

#最大非非内存的大小,持久代内存的最大值,一般设置为物理内存的1/4

tomcat_第4张图片

堆:存储新创建的对象

非堆:存储编译之后的代码,或者是压缩后的类,或者是类(调用的方法)的元数据

ajp-nio-8009

连接器当中的一种类型:ajp:协议名称就叫ajp.nio:一步非阻塞通信  8009是ajp协议的监听端口

Ajp:tomcat服务器和前端web服务器(apache nginx)进行连接,提供一个负载均衡,和请求转发,而且是高效的请求转发,提高并发的处理能力

http-nio-8080

用于处理http协议的网络请求端口号为8080

你可能感兴趣的:(tomcat,java)