Tomcat的服务部署于优化

一、tomcat是一个开源的web应用服务器,nginx主要处理静态页面,那么静态请求(连接数据库,动态页面)并不是nginx的强项,动态的请求会交给Tomcat进行处理,tomcat是用java代码写的程序,运行的是java的web应用程序。tomcat的并发处理能力不强,大项目不适应tomcat做为转发动态的中间件,一般是小项目才使用tomcat。

nginx------转发动态请求------Tomcat

php处理的是.php文件

nginx处理的是.html文件

tomcat处理的是.jsp文件

1、Tomcat作用:

处理动态页面(基于http的请求)

处理后端请求(调用数据库服务)

易部署:Tomcat会自动识别配置文件。自动部署运行

Tomcat的缺点:是一个轻量级的服务软件,处理中小架构的网站可以满足需要,大型的交互需求,Tomcat就非长相了

可以替换为Python和node.js、容器化来处理大型架构网站

在容器化部署的项目架构中是不使用Tomcat的,都是jar包直接运行,包括k8s

2、Tomcat的核心组件:

1、web容器:完成web功能,处理的请求也是nginx转发的http(https)请求,处理的是动态页面(基于Java代码编译的页面)

也可以处理后端的请求(转发到数据库的请求)

servlet:cataline是整个Tomcat处理的底层逻辑。处理web请求的动态页面,也处理后端请求(数据库)

jsp:jsp会把动态翻译成serlvet的代码。用编译后的规则,显示代码的静态页面。

静态页面:html

动态页面:php index.php

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

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

servlet容器:用于开发web应用程序的关键组件

处理http请求,生成动态内容以及与客户端之间的交互、和前端交互 、后端数据库服务器交互、和redis缓存交互

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

3、servlet作用:

根据类中的方法处理http请求

生成动态页面内容

会话管理,处理用户对话,跟踪用户在互通请求之间的状态。servlet可以在用户访问不同页面时保持用户的状态信息(购物车同步,用户同步登录)

JSP:java server pages 动态网页的开发技术,使用JSP的标签可以在html的网页当中插入java代码。

<% 开头

%> 结尾

实现一个基于Java web应用程序的访问界面。用户界面。或者访问数据库生成页面内容

4、Tomcat的核心功能:

功能部分由两个块组成:

由接收和响应外部请求的连接器connector和负责处理请求的 container组成

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

host:代表站点,也就是虚拟主机,一个engine可以有多个host

context:一个context指向一个web应用

wrapper:最底层,处理和编译代码,运行结果。运行出来的结果在往上层反馈到连接器,最后到用户

service:对外提供外部服务,包含connector和container。

tomcat可以有多个service,每个service之间相互是独立的。

5.Java组件:

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

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

JVM:java的虚拟机负责编译后的java字节码编程本地的机器码。主要就是运行java的代码

运行完之后jvm提供内存管理、垃圾回收机制、线程管理。

二、tomcat的安装:

1.安装软件包:apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm

2.关闭防火墙及安全机制:systemctl stop firewalld

setenforce 0

3.安装java的依赖环境:rpm -ivh jdk-8u201-linux-x64.rpm

4.设置java的环境变量:vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

export CLASSPATH=.:JAVA_HOME/lib/tools.jar:JAVA_HOME/lib/dt.jar

export PATH=JAVA_HOME/bin:PATH

5.刷新:source /etc/profile.d/java.sh

6.解压tomcat软件包:tar -xf apache-tomcat-9.0.16.tar.gz

7.将解压的apache-tomcat-9.0.16改名为tomcat:mv apache-tomcat-9.0.16 tomcat

8.将改名后的tomcat的路劲移到/usr/local下:mv tomcat/ /usr/local/

9.启动tomcat:

10.查看端口是否也启动:

11.进行访问:

12.如何打开访问网页的Manager APP页面:

13.打开页面

二、tomcat的优化

1.tomcat自身优化:默认配置不适合生产环境,可能频繁出现假死,需要不停的重启;根据生产的实际情况,自行测试。

http默认端口8080

https默认端口443

maxThreads:tomcat使用线程来处理接受请求的个数,也就是tomcat最多可以创建多少个线程,默认是200个,一般设置500-1000个。

minSpsreThreads:tomcat最小空闲线程数,tomcat开启后没人使用的情况下也会有线程待命,默认值是10个,一般设置为20个。

maxSpareThreads:最大空闲线程数,一旦线程总数超过这个值,tomcat就会关闭不再需要的线程,默认就是-1,不限制,一般这个值不会设置。

connectionTimeout=20000:网络连接超时时间,单位为毫秒,设置为0就是永不超时,一般不会设置为0的,平时设置的就是默认20000毫秒。

enableLookups:是否支持反向解析,true禁用,false开启;一般设置为false开启可以提高速度。

disableUplaodTimeout:上传时是否使用超时机制,一般设置为false开启。

connectionUploadTimeout:设置上传的超时时间,默认为10秒,一般设置为20秒。

acceptCount:当所有可以使用处理请求的线程数都被使用时,可以接入请求的最大队列长度,超过了这个数字的请求将被不予处理将会直接丢弃,默认100个。

compression:是否对相应数据进行压缩,on时开启,off关闭,开启压缩之后,可以有效的减少页面的大小,对文本无效,只对图片音频及视频有用,一般可以减少三分之一,默认是off。

compressionMinsize:表示压缩的最小值,只有响应的报文大于这个值才会进行压缩,如果开启了压缩,默认是2048。

noCompressionUserAgents:表示浏览器名称,对于这些浏览器不启用压缩。

compressableMimeType:压缩类型,指定对哪些类型的文件进行压缩。

常用的页面压缩类型:

文本类型:text/plain,text/html,text/css,text/javascript

图像类型:image/jpg,image/jpeg,image/gif

音频类型:audio/ogg,audio/wav,audio/mpeg

视频类型:video/mp4,video/webm,video/rmvb,video/quicktime

应用程序:application/pdf,applicable/json,applicable/xml

2.内核优化:

内核的配置文件:vim/etc/security/limits.conf:打开文件数的限制,系统初始化第一步要做的事情。

vim/etc/sysctl.conf:内核参数文件

以下为内核参数文件的重要的内容:

net.ipv4.ip_forward=0/1:禁用或者开启数据包的转发功能,要做路由器必须要打开,0是关,1是开。

net.ipv4.tcp_max_tw_buckets=2000:允许timewait的最大数量。

net.ipv4.tcp_sack=1:启用有选择的应答,提高tcp的处理性能。

net.core.netdev_max_backlog=262144:网络接收数据包队列的最大的数值。

vm.swappiness=0:关闭内存的交换行为,不适用交换分区,k8s默认就不能使用交换分区,否则会报错。

net.ipv4_max_orphans:系统允许的最大的tcp最大的连接数量。

net.ipv4.ip_local_port_range=1024-65000:设定系统的端口范围。

net.ipv4.tcp_fin_timeout=10:设置tcp关闭连接的超时时间。

net.ipv4.tcp_keepalive_time:设置tcp的keepalive包的发送频率,用于检测连接状态。

3.JVM优化

-Xms2048m:java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配高一些。

-Xmx2048m :java堆的最大值,也就是jvm最大内存,取决于物理内存的大小,官方建议设置成xms一样的值,设置成物理内存的一半。

-Xmn768m:新生代内存的大小,官方推荐,设置成jvm内存最大值的3/8,java自带垃圾回收机制,java进行垃圾回收之后不需要重新计算堆区的大小。

堆区:新生代,中生代,老年代。

每生成一个新的对象,对象占用的内存空间就是新生代空间;垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收的资源就转移到中生代;中生代的就会转移到老年代。

整个ivm堆的大小:新生代+老生代+永久代(系统自带的)

-XX:ParallelGcThreads=2 配置并行收集器的线程数,同时有多少个线程一起进行垃圾回收,配置成cpu的一半。

-XX:PermSize=1024m 设置非堆内存的初始值,也就是java中的持久代内存的大小,默认是物理内存的1/4.建议设置成整个ivm内存的一半,在非堆区内存中的不会被垃圾机制回收。

-XX:MaxPermSize=1024m:非堆内存的最大值,和初始值一致即可。

-Djava.awt.headless=true:防止在linux环境的访问下web页面无法打开。

-XX:+DisableExplicitGC" :老年代的收集算法,缩短垃圾回收机制的时间。

PS Eden space 堆内存 创建一个新的对象都在堆内存中万恒。

PS Old Gen 堆内存,长期存活的对象,永生代。

PS Survivor Space 堆内存,PS Eden Space和PS Old Gen之间的存活对象,中生代

Code cache 非堆内存,存储已经编译的代码

Compressed Class space 非堆内存 存储已经压缩过的类定义

Metaspace 非堆内存,存储元数据的区域。

ajp-nio-8009:ajp-nio:连接器的类型,ajp是协议,nio是异步非阻塞的通信方式。

ajp协议:tomcat服务器和web服务器之间进行连接的协议,可以提供负载均衡和高效转发;nio可以提高并发的处理能力;8009就是ajp的默认端口

4.优化tomcat的启动速度:

urandom:非阻塞的版本,不宜俩系统终端,进程忙也不会进入等待状态,所以处理速度相对较快,如果对应用的安全性要求比较高则使用/dev/random

相关推荐
weisian1515 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~7 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
.生产的驴9 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
v'sir23 分钟前
POI word转pdf乱码问题处理
java·spring boot·后端·pdf·word
提高记忆力31 分钟前
SpringBoot整合FreeMarker生成word表格文件
java·spring
JDS_DIJ32 分钟前
RabbitMQ
java·rabbitmq·java-rabbitmq
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】生产消费模型 & 阻塞队列
java·开发语言·java-ee
hxj..1 小时前
【设计模式】外观模式
java·设计模式·外观模式
冰逸.itbignyi1 小时前
SpringBoot之AOP 的使用
java·spring boot
qq_441996053 小时前
Mybatis官方生成器使用示例
java·mybatis