Tomcat的服务部署于优化

news/2024/9/14 1:57:49/ 标签: tomcat, java

一、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


http://www.ppmy.cn/news/1475597.html

相关文章

[leetcode]partition-list 分隔链表

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…

【数学建模】——【线性规划】及其在资源优化中的应用

目录 线性规划问题的两类主要应用&#xff1a; 线性规划的数学模型的三要素&#xff1a; 线性规划的一般步骤&#xff1a; 例1&#xff1a; 人数选择 例2 &#xff1a;任务分配问题 例3: 饮食问题 线性规划模型 线性规划的模型一般可表示为 线性规划的模型标准型&…

Oracle各种连接写法介绍

1、左连接 左连接&#xff08;左外连接&#xff09;&#xff1a; 基表全部查出来&#xff0c;外连接表有的匹配&#xff0c;没有则为null&#xff1b; 记录数与基表的记录数相同&#xff0c;前提是where后未加条件过滤&#xff1b; 两种写法&#xff08;left join&#xff09…

DP讨论——建造者模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 组合关系中&#xff0c;如果要A对象创建B对象&#xff0c;或者要A对象创建一堆对象&#xff0c;这种是普遍的需求。 你出招 这种适合创建者模式&#xff0c;我感觉也是比较常见的。 构造函数…

《从零开始学习Linux》——开篇

前言 近日笔者新开专栏&#xff0c;《从零开始学习Linux》&#xff0c;Linux水深而且大&#xff0c;学了一圈之后&#xff0c;有懂得有不懂的&#xff0c;一直没有机会整体的全部重新捋一遍&#xff0c;本专栏的目的是&#xff0c;带着大家包括我自己重新学习Linux一遍这些知识…

Taro自定义FromData实现本地路径转换为文件

在用Taro写头像上传功能时&#xff0c;因为需要对获得的图片进行剪切成圆形或方形。使用组件剪切完之后返回的是一个本地图片的相对路径。这个时候我们就需要自己实现将本地路径重新转换为二进制文件。 引入两个js文件 mimeMap.js module.exports {"0.001": &quo…

Java集合类常见面试题

一些常见的Java集合类高频面试题包括&#xff1a; ArrayList和LinkedList的区别是什么&#xff1f;HashMap和HashTable的区别是什么&#xff1f;HashSet和TreeSet的区别是什么&#xff1f;ConcurrentHashMap的实现原理是什么&#xff1f;如何遍历HashMap和HashTable&#xff1…

UDP通讯实现

服务器端&#xff1a; 1.获取套接字 int fd;fdsocket(AF_INET,SOCK_DGRAM,0);if(fd<0){perror("socket");exit(0);} #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); -domain: 指定通信域&…

Spring 事务管理配置方法

Spring中声明式的事务配置方法有两种&#xff0c;一种是注解方式&#xff0c;另一种可能用AOP切片方式来实现。 一、注解方式 在Spring配置文件中加入配置 <!-- DataSource配置 --><bean id"dataSource"class"com.mchange.v2.c3p0.ComboPooledDataSo…

IC后端设计中的shrink系数设置方法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在一些成熟的工艺节点通过shrink的方式(光照过程中缩小特征尺寸比例)得到了半节点,比如40nm从45nm shrink得到,28nm从32nm shrink得到,由于半节点的性能更优异,成本又低,漏电等不利因素也可以…

计算机视觉之ResNet50图像分类

前言 图像分类是计算机视觉应用中最基础的一种&#xff0c;属于有监督学习类别。它的任务是给定一张图像&#xff0c;判断图像所属的类别&#xff0c;比如猫、狗、飞机、汽车等等。本章将介绍使用ResNet50网络对CIFAR-10数据集进行分类。 ResNet网络介绍 ResNet50网络是由微…

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…

【链表】算法题(一) ---- 力扣 / 牛客

一、移除链表元素 移除链表中值为val的元素&#xff0c;并返回新的头节点 思路&#xff1a; 题目上这样说&#xff0c;我们就可以创建一个新的链表&#xff0c;将值不为val的节点&#xff0c;尾插到新的链表当中&#xff0c;最后返回新链表的头节点。 typedef struct ListNo…

景联文科技以高质量多模态数据集赋能AI大模型,精准匹配提升模型性能

在人工智能的浪潮中&#xff0c;语料数据如同建筑的基石&#xff0c;其质量、规模和运用策略直接决定了AI模型的表现和应用的广泛性。 景联文科技在AI领域深耕多年&#xff0c;打磨了高质量多模态数据集&#xff0c;致力于为不同训练阶段的算法精准匹配高质量数据资源。 3000万…

【论文速读】| JADE:用于大语言模型的基于语言学的安全评估平台

本次分享论文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者单位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 关键…

如何使用IPython的并行计算能力处理大数据

目录 引言IPython概述 什么是IPythonIPython的特点 并行计算简介 什么是并行计算并行计算的优势 IPython的并行计算功能 IPython.parallel模块IPython并行架构 IPython的安装与配置 安装IPython配置并行环境 IPython并行计算的基础 任务分发与负载均衡核心概念&#xff1a;Cli…

【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

前言 最近因为之前的630版本有点忙&#xff0c;导致断更了几天&#xff0c;现在再补上。换换脑子。 目前内测系统的华为应用市场&#xff0c;各种顶级APP陆续都放出来beta版本了&#xff0c;大体上都完成了主流程的开发。欣欣向荣的气息。 学习思路 关于学习HarmonyOS的问题…

AI网络爬虫022:批量下载某个网页中的全部链接

文章目录 一、介绍二、输入内容三、输出内容一、介绍 网页如下,有多个链接: 找到其中的a标签: <a hotrep="doc.overview.modules.path.0.0.1" href="https://cloud.tencent.com/document/product/1093/35681" title="产品优势">产品优…

Python3极简教程(一小时学完)下

目录 PEP8 代码风格指南 知识点 介绍 愚蠢的一致性就像没脑子的妖怪 代码排版 缩进 制表符还是空格 每行最大长度 空行 源文件编码 导入包 字符串引号 表达式和语句中的空格 不能忍受的情况 其他建议 注释 块注释 行内注释 文档字符串 版本注记 命名约定 …

使用Apache Beam进行统一批处理与流处理

Apache Beam是一个开源的统一编程模型&#xff0c;用于定义和执行数据处理流水线&#xff0c;支持批处理和流处理。Beam旨在提供一个简单、可扩展且灵活的框架&#xff0c;适用于各种数据处理任务。本文将详细介绍如何使用Apache Beam进行批处理和流处理&#xff0c;并通过Java…