tomcat的介绍与优化

tomcat介绍

tomcat和php一样,都是用来处理动态页面的。
tomcat也可以作为web应用服务器,开源的。

php .php
tomcat .jsp
nginx .html

tomcat 是用java代码写的程序,运行的是javaweb应用程序

tomcat的特点和功能:
1.servlet容器:执行java servlet 服务端的Java程序,处理客户端的http请求,以及响应
2.jsp容器 javaserver page 动态页面技术,可以在html页面嵌入Java代码
3.自身也是一个http服务器
4.tomcat是轻量级的动态页面处理程序,高并发场景不适用
tomcat自身的优化 及系统内核优化,jvm优化
servlet:
是java语言中用于开发web应用程序的关键组件
处理http请求,生成动态内容以及响应客户端请求
处理http请求
生成动态内容
处理java业务逻辑
会话管理 保持用户状态信息,购物车同步,用户登录等等
也可以转发nginx的动态请求到数据库
jsp:web应用程序界面,使用java语言实现
.jsp为结尾的文件 index.jsp

tomcat 的组件

connector:负责对外接收和响应请求,是tomcat与客户端沟通的枢纽,监听端口接收外接请求

端口: 8080
接收到了请求之后,传递给其他组件进行处理,处理完成之后回到connector ,再响应客户端。

container:负责处理业务逻辑,由 engine host context wrapper四个功能组成

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

host:一个host就是一个主机,也可以叫站点 通过配置host可以添加多个站点

context:一个context代表一个web应用

wrapper:封装器,负责处理最底层的逻辑

service:对外提供web服务 包含connector和container

tomcat可以有多个service 每个service之间互相独立

tomcat目录的作用

1.bin 存放启动和关闭tomcat脚本的文件 startup.sh shutdown.sh

2.conf 存放tomcat的主配置文件 server.xml主配置文件
context.xml host的默认配置信息
tomcat-user.xml 登录时认证用户和密码的相关信息
lib tomcat运行时需要的jar包 一般不动
logs:日志文件 catalina.out 主日志文件
temp:存放tomcat运行时产生的文件
webapps:用来部署web应用的目录,类似于nginx的html

tomcat的优化

1.tomcat自身的优化
2.内核优化
3.jvm优化

tomcat的并发处理能力不强

优化tomcat的启动速度

file:/dev/urandom

非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态。处理速度相对较快

如果对应用的安全性要求比较高,使用 /dev/random

默认配置不适合生产环境,可能频繁地出现假死,需要不停的重启

根据实际情况自行测试

自身的优化

port 8080 http

8443 https

接收客户端https的请求

maxThreads:tomcat使用线程来处理接收请求的个数。即tomcat最多可以创建的线程,默认200个 一般 500-1000个
minSpareThreads 最小空闲数线程,tomcat开启之后,没人使用也会有进程待命,默认10
maxSpareThreads 最大空闲数线程,一旦线程总数超过这个值,tomcat就会关闭不再需要的线程,默认-1,不限制(不关闭其他线程),一般不设置
connectionTimeout="20000"网络连接超时时间,单位是毫秒,设置成0,永不超时。默认状态即可
enableLookups 是否支持反向解析 true false 一般是false关闭,提高处理速度
disableUploadTimeout 上传时是否使用超时机制,true是关闭 ,false是开启
connectionUploadTimeout上传的超时时间 ,默认10s , 一般 15 、20
acceptCount 当所有可用的处理请求的线程数都被使用时,可以接入请求的最大队列长度,超过这个数字的请求将被不予处理(直接丢弃),默认100个
compression 是否对响应数据进行压缩,on开启,off关闭,默认off 。开启压缩之后可以有效地减少页面的大小(文本不会压缩,图片,音频,视频),一般可以减少三分之一,节省带宽(实测没什么用)
compression="on"之后:
compressionMinSize 响应压缩的最小值,只有响应的报文大于这个值才会压缩,如果开启压缩,默认值2048(2M)
noCompressionUserAgents=“浏览器名称” 对于这些浏览器,不启用压缩。
compressableMimeType=“text/plain,video/mp4” 压缩类型,指定对哪些文件类型进行压缩

常用的页面类型
文本类型 text/plain text/html text/css text/javascript
图片类型 image/jpg image/jpeg image/gif
音频类型 audio/ogg、wav、mpeg
音频 video/mp4,webm,rmvb,quicktime
应用程序 application/pdf,json,xml

内核优化:

系统安全的优化

1.vim /etc/security/limits.conf
打开文件数限制,系统初始化第一步要做的事
2.内核参数文件
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.tcp_max_orphans 系统允许的最大的tcp连接数量
net.ipv4.ip_local_port_range=1024 65000
1024 65000 设定系统的端口范围
net.ipv4.tcp_fin_timeout=10 设置tcp关闭连接的超时时间
net.ipv4.tcp_keepalive_time 设置tcp的keepalive包的探测包的发送频率,用于检测连接状态

JVM优化

JAVA_OPTS=“$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC”
cygwin=false

-Xms2048m java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配的高一点。
-Xmx2048m Java堆的最大值,即jvm的最大内存,取决于物理内存的大小,官方建议与xms一样
设置成物理内存的一半
-Xmn768m 新生代内存的大小,官方推荐为jvm内存的最大值的3/8
java自带垃圾回收机制 java进行垃圾回收之后,不需要重新计算堆区的大小

堆区:新生代 中生代 老生代
每生成一个新的对象,对象占用的内存空间就是新生代空间
垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收的资源转移到中生代,之前的中生代会转移到老年代。
整个jvm堆的大小:新生代+老生代+永久代(系统自带的)
-XX:ParallelGCThreads=2 配置并行收集器的线程数,同时有多少个线程一起来进行垃圾回收,与cpu数目的一半
-XX:PermSize=1024m 设置非堆内存的初始值,持久代内存的大小,默认物理内存的1/4,建议设置为jvm内存的一半
持久代:非堆内存是不会被Java的垃圾回收机制处理的
-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 之间的存活对象,中生代
CodeCache非堆内存,存储已经编译的代码
Compressed Class Space非堆内存 存储已经压缩过的类定义
Metaspace非堆内存,存储元数据的区域。
ajp-nio-8009
ajp-nio 连接器的类型,ajp是协议,nio异步非阻塞的通信方式
ajp协议: tomcat服务 器和web服务器之间进行连接的协议,可以提供负载均衡和高效转发。nio可以提高并发的处理能力
8009就是ajp的默认端口。

tomcat和nginx实现动静分离
访问nginx就是静态页面,
nginx代理 index.jsp 可以访问tomcat的动态页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

木舟0基础学习Java的第十六天(异常,分类,自定义异常,注意事项)

异常 异常概述:异常是Java程序运行过程中出现的错误 异常分类:API查找Throwable 1.Error(服务器宕机,数据库崩溃等) 2.Exception C(异常的继承体系)API查RuntimeException 运行时异常:一般是程序员的错误异常可以让我们发现错…

算法力扣刷题记录 三十七【二叉树层序遍历】

前言 二叉树递归遍历和二叉树迭代遍历 实现的前中后序遍历都归类深度搜索; 广度搜索如何实现?一层结束,再继续下一层搜索:层序遍历。 一、题目阅读 【102.二叉树的层序遍历】 给你二叉树的根节点 root ,返回其节点值…

自然语言生成(NLG)- Transformer教程

近年来,自然语言生成(Natural Language Generation,NLG)技术的发展可谓是日新月异,而其中的核心技术之一便是Transformer。作为一种革命性的深度学习模型,Transformer改变了传统的自然语言处理(…

Linux 关闭某个服务失败处理方法

在linux服务器上当我准备关闭Java应用程序时,出现下列错误: [rootVM-32-25-centos ~]# service eposGatewayService stop Application is running as root (UID 0). This is considered insecure. Unable to kill process 7080 如果不想重启主机&#…

如何在iPhone上恢复图片?5 个有效解决方案

对于许多iPhone用户来说,照片是存储在他们设备上的最重要的数据,因此丢失这些照片可能是一场灾难。 但是,即使您不小心删除了iPhone上的部分或全部图片,也可以将其取回。 我们将讨论如何在有或没有备份的情况下在iPhone上恢复已…

面试篇-Mysql-2+事务隔离级别的实现

文章目录 前言一、Mysql 的事务你了解吗二、你了解Mysql 的事务隔离级别吗:2.1 你知道Mysql 的脏读,不可重复读,幻读的问题吗:2.1.1 脏读:2.1.2 不可重复读:2.1.3 幻读: 2.2 对于并发场景下的脏…

Python使用策略模式和openpyxl库创建Excel文件并追加内容

from openpyxl import load_workbook# 数据数组 data [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]# 打开现有的 Excel 文件 excel_file sheetApend_example.xlsx wb load_workbook(excel_file)# 选择要追加数据的工作表 sheet_name test_Sheet2 # 指定要追加数据的工作表名称 sheet…

用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗

1.用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗 是的,可以在x86的电脑上使用虚拟机技术虚拟出ARM架构的电脑。以下是通过虚拟机实现x86电脑上虚拟ARM电脑的几个关键步骤: 选择合适的虚拟化软件:通常,你可以使用如QE…

AI Agent满级进化!骑马种田、办公修图,样样精通,昆仑万维等发布通用Agent新框架

【导读】智能体又双叒叕进化了!这次,什么游戏都能玩,什么软件都能操控了。 近日,昆仑万维携手北京智源人工智能研究院、新加坡南洋理工大学、北京大学等顶尖名校机构,联合提出了迄今为止第一个既能玩多种商业游戏又能…

Excel的Index+MATCH组合使用方法

INDEX函数 INDEX函数作用:用于从指定的单元格区域中返回特定行和列的值。 参数形式为:INDEX(array, row_num, [column_num]) array:必需。单元格区域或数组常量。 row_num:必需。要返回的值所在的行号。 [column_num]&#x…

【算法】【二分法】二分法详解

先给y总打一个广告。(我这种废物收不到钱) 本科时候就在打蓝桥杯玩玩算法,当时听朋友的一个刷题且涵盖教程的网站,ACWING。 www.acwing.com 里面好处是大部分基础算法都有,Y总的视频! y总我的神&#xff01…

LLMs 入门实战系列

【LLMs 入门实战系列】 第一层 LLMs to Natural Language Processing (NLP) 第一重 ChatGLM-6B 【ChatGLM-6B入门-一】清华大学开源中文版ChatGLM-6B模型学习与实战 介绍:ChatGLM-6B 环境配置 和 部署 【ChatGLM-6B入门-二】清华大学开源中文版ChatGLM-6B模型微调…

行为模式9.策略模式------促销活动设计方案

行为型模式 模板方法模式(Template Method Pattern)命令模式(Command Pattern)迭代器模式(Iterator Pattern)观察者模式(Observer Pattern)中介者模式(Mediator Pattern…

Rust入门实战 编写Minecraft启动器#5启动游戏

首发于Enaium的个人博客 好了,我们已经完成了所有的准备工作,现在我们可以开始编写启动游戏的代码了。 首先我们需要添加几个依赖。 model { path "../model" } parse { path "../parse" } download { path "../downlo…

ensp防火墙综合实验作业+实验报告

实验目的要求及拓扑图: 我的拓扑: 更改防火墙和交换机: [USG6000V1-GigabitEthernet0/0/0]ip address 192.168.110.5 24 [USG6000V1-GigabitEthernet0/0/0]service-manage all permit [Huawei]vlan batch 10 20 [Huawei]int g0/0/2 [Huawei-…

python 端口的转发

实现端口的转发 tcpsocket.py 对基础的socket进行了封装 import socketclass baseSocket:def service(host:str,port:int,maxSuspend:int)->socket: service_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建 socket 对象service_socket.setso…

GPT的架构与应用 - Transformer教程

在过去的几年里,人工智能技术取得了巨大的进展,其中最引人注目的成就是生成式预训练变换器(GPT)的出现。GPT是一种基于Transformer架构的模型,已在自然语言处理(NLP)领域掀起了革命性变化。今天…

springboot vue 实现验证码

要在Spring Boot和Vue.js中实现验证码功能&#xff0c;可以按照以下步骤进行操作&#xff1a; 在Spring Boot项目中添加验证码相关的依赖。可以使用Google的Kaptcha库来生成验证码图片。在pom.xml中添加以下依赖&#xff1a; <dependency><groupId>com.github.pe…

安全开发--多语言基础知识

注释&#xff1a;还是要特别说明一下&#xff0c;想成为专业开发者不要看本文&#xff0c;本文是自己从业安全以来的一些经验总结&#xff0c;所有知识点也只限于网络安全这点事儿&#xff0c;再多搞不明白了。 开发语言 笼统的按照是否编译成机器码分类开发语言&#xff0c;…

Perl 语言开发(十二):面向对象编程,深入理解与实践

目录 1. 概述 2. 面向对象编程基础 2.1 类与对象的基本概念 3. Perl中的面向对象编程 3.1 定义类和对象 3.1.1 创建类 3.1.2 创建对象 3.2.1 访问器和修改器 3.3 继承 3.3.1 创建基类 3.3.2 创建子类 3.3.3 使用继承 3.4 多态 3.4.1 方法重写 3.4.2 动态绑定 4…