当前位置: 首页 > news >正文

Tomcat部署以及优化

1、tomcat

tomcat是用java代码的程序,运行的是java的web服务器

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

php处理.php为结尾的

tomcat 处理.jsp

nginx 处理 .html

2、tomcat的特点和功能

1、servlet容器:执行java servlet 服务端的java程序,处理客户端的http请求,以及响应。

servlet:是java语言当中用于开发web应用程序的关键组件。处理http请求,生成动态内容,以及响应客户端的请求。处理http请求,生成动态内容,处理java的业务逻辑,会话管理,保持用户的状态信息,购物车同步,用户登录等等。也可以转发nginx的动态请求到数据库。

2、jsp容器 javasever page,这是一种动态页面技术,可以在html页面里面嵌入java代码。

jsp:web应用程序的界面,这个界面的语言是用java来实现的.jsp为结尾的文件,index.jsp3、自身也是一个http的服务器

4、tomcat是一个轻量级的动态页面处理程序,高并发场景不使用。

3、tomcat的组件

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

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

connector:负责对外接受和响应请求。它是tomcat与客户端沟通的一个枢纽,监听端口接受外界请求。

端口:8080。

接受到了请求之后,要传递给其他组件进行处理,处理完成之后要回到connector,在响应客户端。

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

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

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

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

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

4、tomcat目录的作用

bin 存放启动和关闭tomcat脚本的文件,starup.sh shutdown.sh。

conf 存放tomcat的主配置文件,server.xml主配置文件。

context.xml:存放host的配置信息。

tomcat-user.xml:登录时认证用户和密码的相关信息,manager文件必须要赋权修改之后才能打开。

lib:tomcat运行时需要jar包,一般不动。

logs:日志文件,catalina.out主日志文件。

temp:存放tomcat运行时产生的文件。

webapps:用来部署web应用的目录,类似于nginx的html。

5、Tomcat服务的部署

拖入两个包

1、搭建环境

关闭防火墙以及安全机制

systemctl stop firewalld
setenforce 0

2、 安装jdk环境

#某rpm包尚未安装,我们可以通过该命令查询其说明信息、安装以后会生成的文件;
rpm -qpl jdk-8u201-linux-x64.rpm #安装并以#显示安装进度以及显示详细过程
rpm -ivh jdk-8u201-linux-x64.rpm #查看jdk环境
java -version

 在/etc/profile.d/  目录下创建相关的 .sh 脚本,profile有默认调用的功能。

vim /etc/profile.d/java.sh
---------------------------------------------
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
wqsource /etc/profile.d/java.sh #生效环境
java -version

3、安装tomcat

cd /opt
#解压tomcat软件包
tar zxvf apache-tomcat-9.0.16.tar.gz#移动至服务软件包统一管理目录中,并且简易其名称
mv apache-tomcat-9.0.16 /usr/local/tomcat

 测试功能,tomcat目录下的bin目录下控制tomcat的关闭与启动

[root@localhost bin]# ./shutdown.sh #关闭tomcat服务[root@localhost bin]# ./startup.sh #开启tomcat服务

测试页面,默认端口是8080

6、  tomcat优化

tomcat优化:tomcat自身的优化、内核优化、jvm优化(开发优化)

tomcat的并发处理能力不强,大项目一般不使用转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用)。

1、优化tomcat的启动速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
-------------------------
set nu
117行
file:/dev/urandom #修改结果为异步非阻塞
重启

非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态,所以处理速度相对较快,如果对应用的安全性要求比较高

2、默认配置不适合成产环境,可能频繁出现假死,需要不停的重启。 根据生产环境的实际 情况,自行测试。

vim server.xml
71行
#port 8080是http的端口 80
#8443 是https的端口 443
#接收客户端https的请求优化线程
maxThreads="500" :tomcat使用线程来处理接收请求的个数,tomcat最多可以创建多少个线程。默认是200个500 1000
minSpareThreads="20":最小空闲数线程,tomcat开启之后,没人使用也会有进程待命,默认值是10
maxSparThrads:最大空闲数进程,一旦线程总数超过了这个值,tomcat就会关闭不再需要的线程。默认是-1,不限制,一般不设置
connectionTimeout="20000" 网络连接超时时间,单位的毫秒,设置成0,永不超时,默认即可。
enableLookups:是否支持反向解析,取值范围:true/false 一般都是关闭false,可以提高处理速度
disableUplaodTimeout=false:上传时是否使用超时机制,默认10秒。true是禁用/false是开启
connectionUploadtimeout="20":上传的超时时间,自定义
acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以接入请求的最大队列长度,超过了这个数字的请求被不予处理(直接丢弃)默认100个。
compression:是否对请响应数据进行压缩,on就是开启,off就是关闭
开启压缩之后,可以有效的减少页面的大小(文本无效,图片,音频,视频)一般可以减少三分之一,节省带宽,默认off。
compression="on"
compressionMinSize:表示响应压缩的最小值,只有响应报文大于这个值才会进行压缩,如果开启了压缩,默认值2048。
noCompressionUserAgents="浏览器名称" 对于这些浏览器,不启用压缩。
compressableMimeType="text/plain,image/jpg"压缩类型,指定对那些类型的文件进行压缩。

常用的页面类型:

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

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

音频:audio/ogg,wav,mpeg

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

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

多个之间使用逗号隔开

3、内核优化:系统安全的优化补齐

内核优化的配置文件:

1、打开文件数的限制,系统初始化第一步要做的事情 

vim /etc/security/limits.conf

2、内核参数文件:

vim /etc/sysctl.conf---------------------------
sysctl -a 查看系统默认参数
常见的
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包的探测包的发送频率,用于检查连接状态

其他的

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请求。net.ipv4.icmp_echo_ignore_broadcasts: 禁止系统对广播和多播地址的ICMP回显和时间戳请求作出响应。net.ipv4.conf.default.accept_source_route: 不接受源路由,增加网络安全性。net.ipv4.tcp_syncookies = 1: 启用SYN Cookies,保护系统免受TCP SYN 攻击。net.ipv4.tcp_max_tw_buckets = 6000: 设置允许的TIME_WAIT套接字最大数量,避免服务器性能下降。net.ipv4.tcp_sack = 1: 启用有选择的应答(SACK)来提高TCP性能。net.ipv4.tcp_window_scaling = 1: 启用TCP窗口缩放功能,允许大窗口的TCP传输。net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 调整TCP套接字读取和写入缓冲区大小。net.ipv4.tcp_mem: 设置TCP缓冲区的最小、默认和最大值。net.core.wmem_default, net.core.rmem_default, net.core.rmem_max, net.core.wmem_max: 调整网络核心
缓冲区的大小。net.core.netdev_max_backlog: 控制网络接口接收数据包的排队队列大小。net.ipv4.tcp_max_orphans: 设置系统允许的孤立TCP连接最大数量。net.ipv4.tcp_max_syn_backlog: 控制系统允许的三次握手队列长度。net.ipv4.tcp_synack_retries 和 net.ipv4.tcp_syn_retries: 设置SYN-ACK和SYN请求的重试次数。net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse: 启用TIME_WAIT套接字快速回收和重用。net.ipv4.tcp_fin_timeout: 设置TCP连接FIN(关闭连接)的超时时间。net.ipv4.tcp_keepalive_time: 设置TCP keepalive探测包发送频率,以检测连接状态。net.ipv4.ip_local_port_range: 设置本地端口范围,用于分配本地应用程序端口。net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6: 禁用IPv6。net.netfilter.nf_conntrack_max 和其他 net.netfilter.nf_conntrack_*: 控制连接跟踪和防火墙相关设置。net.nf_conntrack_max: 设置最大连接跟踪项数。vm.overcommit_memory = 0: 控制内存超额分配策略,避免OOM killer杀掉进程。vm.swappiness = 0: 设置内存交换行为,降低内存交换。fs.file-max = 999999: 设置进程可以同时打开的最大文件句柄数。net.ipv4.tcp_max_tw_buckets = 6000: 设置操作系统允许的TIME_WAIT套接字最大数量。net.ipv4.ip_local_port_range = 1024 65000: 设置系统允许的本地端口范围。net.ipv4.tcp_tw_recycle = 1: 启用TIME_WAIT套接字快速回收。

4、 jvm的优化

起jar包的命令

java -jar 包名 &

 在bin下的catalina.sh

对以下命令行进行解释

-Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 
cygwin=false

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

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

设置成物理内存的一半。

-Xmn:新生代内存的大小,官方推荐,设置成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页面的图片不能打开。

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

相关文章:

Tomcat部署以及优化

1、tomcat tomcat是用java代码的程序,运行的是java的web服务器 tomcat和php一样都是用来处理动态页面,tomcat也可以做为web应用服务器,开源的 php处理.php为结尾的 tomcat 处理.jsp nginx 处理 .html 2、tomcat的特点和功能 1、servle…...

ubuntu 22 安装 lua 环境 编译lua cjson 模块

在 windows 下使用 cygwin 编译 lua 和 cjson 简直就是灾难,最后还是到 ubuntu 下完成了。 1、下载lua源码(我下载的 5.1 版本,后面还有一个小插曲), 直接解压编译,遇到一个 readline.h not found 的问题,需要安装 re…...

地下城游戏中都有哪些类型的服务器?

地下城类型的服务器以其独特的魅力吸引了众多玩家。这些服务器通常基于流行的地下城探险游戏,如《Minecraft》的地下城模式或《Dungeon Fighter Online》等,提供了丰富多样的游戏体验。下面,我们将探讨几种不同类型的地下城服务器及其特点。 …...

大模型面试(二)

这次又接到一个大模型岗位的面试。但是从面试过程来看,现在大模型岗位都要求有相关工作经验,还是太难进了。还是说国内公司早就过了培养人的年代了? 问到了哪些知识点: 开源大模型:项目里用的是浦语大模型&#xff0…...

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具,是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”,只发送源和目标之间的差异,因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…...

每日刷题(二分查找,匈牙利算法,逆序对)

目录 1.Sarumans Army 2.Catch That Cow 3.Drying 4.P3386 【模板】二分图最大匹配 5. Swap Dilemma 1.Sarumans Army 3069 -- Sarumans Army (poj.org) 这道题就是要求我们在给的的位置放入 palantir,每个 palantir有R大小的射程范围,要求求出最少…...

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样,可以参考LLM应用构建前…...

如何从数码相机恢复已删除的照片

照片恢复是恢复已删除照片的最佳工具,它带有恢复 RAW 照片的选项。在本文中,我们将解释如何恢复已删除的照片。 不仅对于专业摄影师,对于像我们这样喜欢捕捉回忆的人来说,瞬间相机都是重要的数码设备。遗憾的是,就像智…...

设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)

创建型模式 单例模式(Singleton Pattern) 单例模式(Singleton Pattern)在Java中的使用场景与在其他编程语言中类似,其主要目的是确保一个类只有一个实例,并提供一个全局的访问点。以下是单例模式的一些常…...

LAMP万字详解(概念、构建步骤)

目录 LAMP Apache 起源 主要特点 软件版本 编译安装httpd服务器 编译安装的优点 操作步骤 准备工作 编译 安装 优化执行路径 添加服务 守护进程 配置httpd 查看 Web 站点的访问情况 虚拟主机 类型 部署基于域名的虚拟主机 为虚拟主机提供域名解析&#xff…...

金南瓜科技SECS/GEM:引领智能制造新潮流

引言 在当今快速发展的半导体行业中,智能制造和自动化生产已成为提升效率和降低成本的关键。金南瓜科技凭借其先进的SECS/GEM解决方案,正成为这一变革的先锋。 SECS/GEM:智能制造的核心 SECS/GEM(SEMI Equipment Communications …...

昇思训练营打卡第二十一天(DCGAN生成漫画头像)

DCGAN,即深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Network),是一种深度学习模型,由Ian Goodfellow等人在2014年提出。DCGAN在生成对抗网络(GAN)的基础上,引…...

东方通Tongweb发布vue前端

一、前端包中添加文件 1、解压vue打包文件 以dist.zip为例,解压之后得到dist文件夹,进入dist文件夹,新建WEB-INF文件夹,进入WEB-INF文件夹,新建web.xml文件, 打开web.xml文件,输入以下内容 …...

spring xml实现bean对象(仅供自己参考)

对于spring xml来实现bean 具体代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…...

MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别

MiniGPT-Med 通用医学视觉大模型&#xff1a;生成医学报告 视觉问答 医学疾病识别 提出背景解法拆解 论文&#xff1a;https://arxiv.org/pdf/2407.04106 代码&#xff1a;https://github.com/Vision-CAIR/MiniGPT-Med 提出背景 近年来&#xff0c;人工智能&#xff08;AI…...

如何判断ip地址在同一个网段:技术解析与实际应用

在网络世界中&#xff0c;IP地址就像每个人的身份证一样&#xff0c;是识别和定位网络设备的关键。然而&#xff0c;仅仅知道IP地址还不足以完全理解其背后的网络结构和通信方式。特别是当我们需要判断两个或多个IP地址是否位于同一网段时&#xff0c;就需要借助子网掩码这一概…...

linux高级编程(TCP)(传输控制协议)

TCP与UDP: TCP: TCP优点&#xff1a; 可靠&#xff0c;稳定 TCP的可靠体现在TCP在传递数据之前&#xff0c;会有三次握手来建立连接&#xff0c;而且在数据传递时&#xff0c;有确认、窗口、重传、拥塞控制机制&#xff0c;在数据传完后&#xff0c;还会断开连接用来节约系统…...

【常见开源库的二次开发】一文学懂CJSON

简介&#xff1a; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。它基于JavaScript的一个子集&#xff0c;但是JSON是独立于语言的&#xff0c;这意味着尽管JSON是由JavaScript语法衍生出来的&#xff0c;它可以被任何编程语言读取和生成…...

点云下采样有损压缩

转自本人博客&#xff1a;点云下采样有损压缩 点云下采样是通过一定规则对原点云数据进行再采样&#xff0c;减少点云个数&#xff0c;降低点云稀疏程度&#xff0c;减小点云数据大小。 1. 体素下采样&#xff08;Voxel Down Sample&#xff09; std::shared_ptr<PointClo…...

AutoHotKey自动热键(六)转义符号

转义符号 符号说明,, (原义的逗号). 注意: 在命令最后一个参数中的逗号不需要转义, 因为程序知道把它们作为原义处理. 对于 MsgBox 所有参数同样如此, 因为它会智能的处理逗号.%% (原义的百分号) (原义的重音符; 即两个连续的转义符产生单个原义字符);; (原义的分号). 注意: 仅…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

高效的后台管理系统——可进行二次开发

随着互联网技术的迅猛发展&#xff0c;企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心&#xff0c;成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统&#xff0c;它不仅支持跨平台应用&#xff0c;还能提供丰富…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...