tomcat 服务器

news2025/3/13 18:48:37

tomcat 服务器

tomcat: 是一个开源的web应用服务器。区别nginx,nginx主要处理静态页面,那么动态请求(连接数据库,动态页面)并不是nginx的长处,动态的请求会交给tomcat进行处理。

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

tomcat 1,处理动态页面(http的请求)

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

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

            4,轻量级的服务软件,处理中小架构的网站可以满足,大型的交互需求,tomcat就非长处了python node.js 容器化来处理在容器化部署的项目架构中是不使用tomcat,都是用jar包直接运行,包括k8s.

tomcat的核心组件:

1,web容器:完成web功能 处理请求也是nginx转发http(s)请求,处理动态页面(java代理编译的页面)处理后端的请求(转发数据库的请求。)

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

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

静态页面:html

动态页面:php inex.php

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

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

servlet容器:用于开发web应用程序的关键组件,处理http请求,生成动态内容于客户端之间的交互,前端交互,后端数据库服务交互。和redis缓存交互。

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

处理http请求

生成动态页面的内容

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

JSP:java server pages 动态网页的开发技术,使用jsp的标签在HTML的网页中插入java代码

<%开头

%>结尾

实现java web应用程序的访问界面。用户界面。或者访问数据库,生成页面内容。

tomcat的核心功能:

功能部分由两个块组成:

接受和响应外部请求的连接器 connector

负责处理请求的 container

包含:

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

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

3 context:一个context 执行一个web应用。

4 wrapper:最底层,处理和编译代码,运行结果。

实验

java组件:

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

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

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

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

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

设置java_home的环境变量,指向jdk,也就是java的工作目录

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

java类的搜索路径

export PATH=$JAVA_HOME/bin:$PATH

把java的可执行命令添加到系统的环境变量当中。

bin:存放启动或者关闭tomcat的脚本文件startup.sh shoutdow.sh

conf:存放的是配置文件server.xml就是tomcat的主配置文件

webapps::tomcat默认的web应用的部署目录。

work:tomcat的工作目录,存放JSP编译之后产生的class文件。清缓存会用到。

tomcat配置虚拟主机:

1,配置工作目录

在公司当中会运行多个项目,一台tomcat太多会浪费资源,所以会在tomcat中配置多个主机,通过不同的域名访问不同的内容。

Host name="www.kgc com 指定站点(虚拟主机的域名)

appBase="webapps" 站点的工作目录在webapps存放web应用的目录

unpackWARs="rue" 启动webapps,对war包进行展开

autoDeploy="true" 防止在默认应用目录的程序文件,自动进行部罢。

xmIValidation="false" #是否验证XML文件执行的有效性标志,

xmINamespaceAware="false" #是否启动xml命令 空间。

docBase="/usr/local/tomcat/webapps/kgc" : web应用程序的具体部署位置,也就是context所属的host中的具体的工作目录。

path:为空,默认就是webapps

reloadable="true":允许重新加载context相关的web应用程序的类.

1、 请求到连接器;连接的端口是8080,连接器接受请求

2. www.kgc.com 引擎管理虚拟主机-----host-----www.kgc.om------context----访问www.kgc.com该主机的工作目录-----webapps/kgc-----index.jsp----wrapper----servlet来解析index.jsp内容

3、响应的内容返回到客户端。

和nginx的虚拟主机是一样的

开启之后要检查端口。

tomcat的优化:

默认配置并不适合生产环境,频繁的出现假死。

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

1,配置文件优化(背 面试题)

server.xml (0配置文件)

maxThreads=“200”

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

minSpareThreads=“200”

最小空闲线程数,tomcat启动是的初始的线程数,表示没人请求,也要打开这些空的线程等待请求 默认是10 一般是200,或者最大的一半

maxSpareThreads

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

connection Timeout 网络连接超时。设置为20000毫秒

enableLookups=“false”

是否方向解析域名,不解析,提高处理效率

disableUploadTimeout="true"

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

connectionUploadTimeout=“15000”

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

accpetCount="100"

所有的可以使用的线程被占用,可以传入的队列长度的最大值。默认100

compression="no" off force: 所有的情况下都进行压缩

是否对响应的数据进行gzip压缩一般都是on 压缩之后的页面大小可以减少1/3.提高响应速度和带宽

noCompressionUserAgents="gozilla chrom"

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

2,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

-server:一定作为第一个参数

-Xms2048m:java初始化堆的大小,是分配jvm的最小内存。cpu性能高,可以再设高一点

-Xms2048m:java初始化堆的大小,是分配jvm的最大内存,取决于物理内存有多大。建议-xms和xmx的值设置成一样,推荐设置成内存的一半。

目的:java的垃圾回收机制清理完堆区后,不需要重新分隔计算堆区的大小。

-Xmn768:新生代内存的大小。官方推荐整个堆区的大小3/8。

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

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

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

-XX:PermSize=1024m

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

-XX:MaxPermSize=1024m

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

-Djava.awt.headless=true

避免在linux环境下,web不能展示图片

-XX:+DisableExplicitGC

禁止调用system.gc() ,误调用了gc方法,会导致jvm的响应速度降低。

堆:存储新创建的对象。

非堆:存储编译之后的代码或者是压缩后的类 或者是类的元数据

ajp-nio-8009

连接器的一种类型:ajp:协议名称就叫ajp.nio: 异步非阻塞通信

8009是ajp协议的监听端口

AJP:tomcat服务器和前端web服务器(APAACCHE nginx)进行连接

提供负载均衡和高效的请求转发,提高并发处理能力

http-nio-8080

用于处理http协议的网络请求

端口8080

3,操作系统优化(内核优化)

Linux内核优化中主要针对两个配置文件 /etc/security/limits.conf 和/etc/sysctl.conf

通常是利用调用内核参数的程序sysctl -a 查询出最优内核参数,然后写入 /etc/sysctl.conf 文件内的。

sysctl -a |grep fs.file-max #查询出的文件句柄数量上限。

文件句柄(File Handle)是操作系统用于跟踪和管理打开的文件或资源的数据结构。

在操作系统中,每个打开的文件、网络连接、设备等都会被分配一个唯一的句柄,

操作系统通过这个句柄来标识和访问这些资源。

句柄数是指操作系统能够同时管理的句柄的数量。在一个计算机系统中,

许多应用程序和进程需要打开和使用文件、网络连接等资源。每个资源都需要一个句柄来进行操作。

如果系统的句柄数限制太低,就可能导致应用程序无法打开足够的文件、网络连接或其他资源,

从而影响系统的性能和可用性。

因此,调整句柄数的设置是确保系统能够处理并发连接和资源请求的重要一环。

在高负载的服务器环境中,适当地增加句柄数的限制可以提高系统的并发能力和性能。

但是过于激进地增加句柄数可能会消耗过多的系统资源,因此需要根据实际需求和硬件配置进行调整。

永久配置:

注意:设置保存后,需要重新ssh连接才会看到配置更改的变化

*soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。

*hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。

*soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。

*hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。

这里使用的通配符 * 表示对所有用户生效。

其他调试内核参数的查看: sysctl -a

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

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

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

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

net.ipv4.ip_forward = 0: 禁用IP数据包的转发功能,通常用于不充当路由器的系统。

net.ipv4.conf.default.rp_filter 和 net.ipv4.conf.all.rp_filter: 控制反向路径过滤,提高网络安全性。

net.ipv4.icmp_echo_ignore_all: 允许或禁止系统响应ping请求。

...

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

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

相关文章

Golang学习:基础知识篇(三)—— Map(集合)

Golang学习&#xff1a;基础知识篇&#xff08;三&#xff09;—— Map集合 前言什么是Golang&#xff1f;Map集合定义 Map综合实例补充 前言 很久之前就想学Go语言了&#xff0c;但是一直有其他东西要学&#xff0c;因为我学的是Java嘛&#xff0c;所以后面学的东西一直是跟J…

Element-UI 日期选择器--禁用未来日期

在做项目的时候经常会遇到一些报表需要填写日期&#xff0c;一般是填写当日及当日以前&#xff0c;这时候我们的日期选择器就需要进行一些限制&#xff0c;比如&#xff1a; 这样之后&#xff0c;就不会误填写到明天啦&#xff0c;下面让我们看一下代码实现 html页面代码 这里…

Unity ECS最新DOTS环境搭建教程

最近DOTS终于发布了正式的版本, 今天我们来基于Unity 2023.1.6来搭建DOTS 1.0.16的开发环境与注意事项。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白&#xff0c;也有一些正在从事游戏开发的技术大佬&#xff0c;欢迎你来交流学习。 1…

Liunx C运算符

一、运算符 &#xff08;一&#xff09;算数运算符 1、float和double不能进行取余操作。 &#xff08;二&#xff09;关系运算符 1、逻辑非 2、逻辑与 例子&#xff1a; if(&#xff08;a-1&#xff09;<b&&b) 如果为真则自增&#xff0c;为假不自增 3、逻辑或 …

leaflet 绘制显示半圆形,扇形示例 (134)

第134个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中绘制显示半圆形,扇形 。这里引用了一个插件,非常方便的绘制扇形和半圆形等。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共77行)安装插件相…

虚拟内存技术的基本概念(局部性原理,特征,实现)

1.传统存储管理方式的特征、缺点 很多暂时用不到的数据也会长期占用内存&#xff0c;导致内存利用率不高。 1.一次性: 作业必须一次性全部装入内存后才能开始运行。 这会造成两个问题: ①作业很大时&#xff0c;不能全部装入内存&#xff0c;导致大作业无法运行; ②当大量作…

node多版本管理器nvm

node多版本管理器nvm 1、为何要使用node版本管理器2、nvm安装步骤2-1、卸载系统中的node2-2、下载nvm2-3、安装 3、维护node版本3-1、安装指定版本node3-2、查看本机已安装的所有node版本3-3、切换本机node版本 1、为何要使用node版本管理器 在日常开发中&#xff0c;难免会遇…

apache log4j漏洞复现

log4j是开源的java存储日志的框架&#xff0c;一般都是大企业用&#xff0c;小企业自带的日志功能足够使用&#xff0c;Log4j2是默认支持解析ldap/rmi协议的&#xff0c;打印的日志中包括ldap/rmi协议都行。 具体介绍参考以下文章&#xff1a; log4j2---基于vulhub的log4j2漏…

Triple协议的隐式参数传递过程

前言 Dubbo 框架的 RPC 调用除了可以传递正常的接口参数外&#xff0c;还支持隐式参数传递。 隐式参数的传递依赖 RpcContext 对象&#xff0c;它持有一个 Map 对象&#xff0c;消费者往 Map 里写入数据&#xff0c;客户端在发起 RPC 调用前会构建 RpcInvocation&#xff0c;然…

linux中如何配置静态ip模式?

对于Linux系统来说&#xff0c;静态IP模式是一种常见的网络配置方式。相比动态IP模式&#xff0c;静态IP模式可以提供更加稳定的网络连接和更好的网络性能。本文将介绍在Linux中如何配置静态IP模式。 一、准备工作 在开始配置之前&#xff0c;需要先做好以下准备工作&#xff1…

Python爬虫基础之Selenium详解

目录 1. Selenium简介2. 为什么使用Selenium&#xff1f;3. Selenium的安装4. Selenium的使用5. Selenium的元素定位6. Selenium的交互7. Chrome handless参考文献 原文地址&#xff1a;https://program-park.top/2023/10/16/reptile_3/ 本文章中所有内容仅供学习交流使用&…

k8s集群授权prometheus(集群外部署)

一、前言 在集群外部prometheus想要调用k8s集群的apiserver获取监控数据需要通过token和ca验证&#xff0c;在集群内部部署的prometheus就不会有这个情况&#xff0c;因为集群内部部署prometheus pod的时候就已经注入了访问集群的token和ca文件&#xff0c;所以以下就针对k8s集…

吴恩达深度学习笔记

B站看的视频&#xff0c;课太长了&#xff0c;180多节&#xff0c;但搬运的没有作业练习&#xff0c;最好找个能练习的 1&#xff0c;假设模型时&#xff0c;以前(2011版机器学习)用西塔代表参数组成的向量&#xff0c;现在用w代表参数组成的向量&#xff0c;b代表西塔0&#x…

Django REST Framework完整教程-RESTful规范-序列化和反序列数据-数据视图

文章目录 1.简介及安装2.案例模型2.1.创建模型2.2.安装mysql必要组件2.3.管理后台转中文2.4.启动后台 3.数据序列化4.RESTful规范4.1.协议、域名和版本4.2.uri(统一资源标识符)4.3.查增删改4.4.过滤信息&#xff08;Filtering&#xff09;4.5.状态码&#xff08;Status Codes&a…

Prometheus-Grafana

Grafana可对Prometheus实现可视化操作。prometheus-grafana提供了一个可运行的环境用于对测试网络进行实时监控。prometheus-grafana下有一个docker-compose.yaml文件用于控制prometheus和grafana的启动&#xff0c;和监控网络的指标。 配置需求&#xff1a; 推荐使用linux系统…

外汇天眼;VT Markets 赞助玛莎拉蒂MSG Racing电动方程式世界锦标赛

随着国际汽联电动方程式世界锦标赛第十赛季的到来&#xff0c;外汇经纪商 VT Markets 和玛莎拉蒂 MSG Racing 宣布了一项为期多年的全球合作。 外汇天眼温馨提醒&#xff1a;在做外汇交易之前&#xff0c;一定要审核清楚外汇平台的资质以及官网信息&#xff0c;以防上当受骗&am…

大模型Agent最新论文及源码合集,覆盖构建、应用、评估

人们对于通用人工智能&#xff08;AGI&#xff09;的追求可以追溯到1950 年代中期&#xff0c;当时的AI研究者对机器拥有人类思维能力抱有很高的期望&#xff0c;但是随着研究的深入&#xff0c;他们发现想实现这个目标比最初设想的困难许多。到如今&#xff0c;AGI仍然有很长的…

【计算机网络】网络原理

目录 1.网络的发展 2.协议 3.OSI七层网络模型 4.TCP/IP五层网络模型及作用 5.经典面试题 6.封装和分用 发送方(封装) 接收方(分用) 1.网络的发展 路由器&#xff1a;路由指的是最佳路径的选择。一般家用的是5个网口&#xff0c;1个WAN口4个LAN口(口&#xff1a;端口)。可…

JDK 21的新特性总结和分析

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

[正式学习java②]——数组的基本使用,java内存图与内存分配

一、数组的两种初始化方式 1.完整格式(静态初始化) 数据类型[] 数组名 new 数据类型[]{元素1,元素2…}; //范例 int[] arr new int[]{1,2,3,4}; 简化书写 一般我们会省略后面的 new 数据类型[] int[] arr {1,2,3,4}; 2.动态初始化 当不知道数组里面的初始值的时候&#xf…