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

相关推荐

  1. Tomcat服务器优化经验

    2024-07-14 20:44:03       26 阅读
  2. Tomcat部署优化

    2024-07-14 20:44:03       42 阅读
  3. Tomcat部署优化

    2024-07-14 20:44:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 20:44:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 20:44:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 20:44:03       57 阅读
  4. Python语言-面向对象

    2024-07-14 20:44:03       68 阅读

热门阅读

  1. 安卓热门面试题二

    2024-07-14 20:44:03       18 阅读
  2. 单元化(Cell Sharding)

    2024-07-14 20:44:03       21 阅读
  3. 网络安全-网络设备及其配置1

    2024-07-14 20:44:03       21 阅读
  4. C++指针

    2024-07-14 20:44:03       23 阅读
  5. Tensor-LLM简单介绍

    2024-07-14 20:44:03       22 阅读
  6. cosyvocie 自回归模型忽大忽下问题解决方案

    2024-07-14 20:44:03       19 阅读
  7. k8s之client-go:golang与k8s交互的桥梁

    2024-07-14 20:44:03       23 阅读
  8. 使用harbor作为chart仓库实现内网部署

    2024-07-14 20:44:03       19 阅读
  9. uniapp使用微信登录

    2024-07-14 20:44:03       19 阅读