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

Web中间件--tomcat学习

Web中间件–tomcat

Java虚拟机详解

什么是JAVA虚拟机

Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码,并执行这些代码。
Java虚拟机的主要组成部分包括:
            - 类加载器:负责加载Java类文件,并将其转换为Java虚拟机可以执行的格式。- 执行引擎:负责执行Java字节码,并将其转换为机器代码。- 垃圾回收器:负责管理内存,自动回收不再使用的对象。- 运行时数据区:用于存储Java程序运行时所需的数据,包括方法区、堆、栈、本地方法栈和程序计数器等。

JAVA 如何做到跨平台

Java通过以下方式实现跨平台:
            - Java虚拟机:Java程序在Java虚拟机上运行,不同平台的Java虚拟机可以执行相同的Java字节码。- 一次编写,到处运行:Java程序只需编写一次,即可在任何支持Java虚拟机的平台上运行,无需重新编译。- 标准库:Java提供了一套标准库,包含了各种常用的功能和API,开发者可以在不同平台上使用相同的代码。

虚拟机基本结构–了解

Java虚拟机的基本结构包括:
            - 类加载器:负责加载Java类文件,并将其转换为Java虚拟机可以执行的格式。- 执行引擎:负责执行Java字节码,并将其转换为机器代码。- 垃圾回收器:负责管理内存,自动回收不再使用的对象。- 运行时数据区:用于存储Java程序运行时所需的数据,包括方法区、堆、栈、本地方法栈和程序计数器等。
类加载子系统
            - 类加载器是Java虚拟机的一部分,负责加载Java类文件,并将其转换为Java虚拟机可以执行的格式。- 类加载器的主要任务包括:- 加载类:从文件系统或网络中加载Java类文件,并将其转换为Java虚拟机可以执行的格式。- 链接类:将加载的类与其他类进行链接,包括验证、准备和解析等步骤。- 初始化类:对类进行初始化,包括执行静态变量的初始化和静态代码块的执行等。
Java堆
            - Java堆是Java虚拟机的一部分,用于存储Java对象和数组。Java堆是Java虚拟机中最大的一块内存区域,所有的对象和数组都在这里分配内存。- Java堆的主要特点包括:- 共享:Java堆是所有线程共享的内存区域,所有线程都可以访问Java堆中的对象和数组。- 动态分配:Java堆中的内存是动态分配的,当需要创建新的对象或数组时,Java虚拟机会在Java堆中分配内存。- 垃圾回收:Java堆中的对象和数组会被垃圾回收器自动回收,不再使用的对象和数组会被自动清除。
Java的NIO库(直接内存)
            - Java的NIO库(New Input/Output)提供了一种新的文件和网络I/O方式,支持非阻塞I/O操作。- NIO库的主要特点包括:- 通道(Channel):NIO使用通道来读写数据,通道可以与文件、网络等进行交互。- 缓冲区(Buffer):NIO使用缓冲区来存储数据,数据在通道和缓冲区之间传输。- 选择器(Selector):NIO使用选择器来管理多个通道的I/O操作,支持非阻塞I/O。- 直接内存:NIO支持直接内存访问,可以在Java堆外分配内存,提高I/O性能。- 直接内存的主要特点包括:- 高效:直接内存访问可以减少数据复制,提高I/O性能。- 直接缓冲区:NIO提供了直接缓冲区,可以在Java堆外分配内存,提高I/O性能。- 直接内存的使用需要注意内存管理,避免内存泄漏和溢出等问题。
垃圾回收系统
            - 垃圾回收器是Java虚拟机的一部分,负责自动回收不再使用的对象和数组,释放内存。- 垃圾回收的主要特点包括:- 自动化:垃圾回收器自动检测不再使用的对象,无需手动释放内存。- 标记-清除算法:垃圾回收器使用标记-清除算法来识别和回收不再使用的对象。- 分代收集:垃圾回收器将对象分为新生代和老年代,采用不同的回收策略,提高回收效率。- 垃圾回收的主要算法包括:- 标记-清除算法- 复制算法- 标记-整理算法
执行引擎
            - 执行引擎是Java虚拟机的一部分,负责执行Java字节码,并将其转换为机器代码。- 执行引擎的主要特点包括:- 解释执行:执行引擎可以逐条解释执行Java字节码,将其转换为机器代码。- 即时编译(JIT):执行引擎可以将热点代码编译为机器代码,提高执行效率。- 优化:执行引擎可以对Java字节码进行优化,提高执行效率。

虚拟机堆内存结构

Java堆内存结构包括:
            - 新生代:用于存储新创建的对象,采用复制算法进行垃圾回收。- 老年代:用于存储长时间存活的对象,采用标记-清除算法进行垃圾回收。- 永久代:用于存储类信息和常量池等数据,采用标记-清除算法进行垃圾回收。
Java堆内存结构的主要特点包括:
            - 动态分配:Java堆中的内存是动态分配的,当需要创建新的对象或数组时,Java虚拟机会在Java堆中分配内存。- 垃圾回收:Java堆中的对象和数组会被垃圾回收器自动回收,不再使用的对象和数组会被自动清除。

常用的JVM参数

跟踪JAVA虚拟机的垃圾回收
            - -XX:+PrintGC:打印垃圾回收日志。- -XX:+PrintGCDetails:打印垃圾回收的详细信息。- -XX:+PrintGCTimeStamps:打印垃圾回收的时间戳。- -XX:+UseGCLogFileRotation:启用垃圾回收日志文件轮转。- -XX:NumberOfGCLogFiles:设置垃圾回收日志文件的数量。- -XX:GCLogFileSize:设置垃圾回收日志文件的大小。-Xloggc:filename:设置垃圾回收日志文件的路径和名称。
在这里GC 日志格式支持 %p 和 %t 两个参数:
            - %p:表示进程ID- %t:表示当前时间
开启gc日志
            -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log
配置JAVA虚拟机的堆空间
- -Xms:设置Java堆的初始大小。
- -Xmx:设置Java堆的最大大小。
- -Xmn:设置新生代的大小。
- -XX:NewRatio:设置新生代和老年代的比例。
- -XX:SurvivorRatio:设置Eden区和Survivor区的比例。
- -XX:MaxTenuringThreshold:设置对象在新生代中存活的最大次数。
实际生产环境中, 我们通常将初始化堆(-Xms) 和 最大堆(-Xmx) 设置为一样大,两个不超过物理内存的一半。以避免程序频繁的申请堆空间。
vim catalina.sh

JAVA_OPTS="-server -Xms2048m -Xmx2048m  -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
创建gc日志存放路径
mkdir /data0/logs/ -p  

安装 Tomcat & JDK

安装JDK

下载安装包
wget https://cdn.azul.com/zulu/bin/zulu11.70.19-ca-jdk11.0.19-linux_x64.tar.gz
解压安装包
tar -zxvf zulu11.70.19-ca-jdk11.0.19-linux_x64.tar.gz -C /usr/local/
配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/zulu11.70.19-ca-jdk11.0.19-linux_x64
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
验证安装是否成功
java -version

安装Tomcat

下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.73/apache-tomcat-9.0.73.tar.gz
解压安装包
tar -zxvf apache-tomcat-9.0.73.tar.gz -C /usr/local/
配置环境变量(可选)

vim /etc/profile

export CATALINA_HOME=/usr/local/apache-tomcat-9.0.73
export PATH= C A T A L I N A H O M E / b i n : CATALINA_HOME/bin: CATALINAHOME/bin:PATH

启动Tomcat

启动Tomcat

cd /usr/local/apache-tomcat-9.0.73/bin
./startup.sh

访问Tomcat
            在浏览器中输入http://localhost:8080, 如果能看到Tomcat的欢迎页面,说明Tomcat安装成功。

JVM 运维实用排障工具

java常用的指令

jps # 查看当前运行的java进程
jstat # 查看java进程的内存使用情况
jmap # 查看java进程的堆内存使用情况
jstack # 查看java进程的线程堆栈信息
jinfo # 查看java进程的配置信息
jcmd # 执行java进程的命令
jconsole # 监控java进程的内存使用情况
jvisualvm # 可视化监控java进程的内存使用情况
jhat # 查看java进程的堆内存使用情况
jstatd # 远程监控java进程的内存使用情况
jmap -heap <pid> # 查看java进程的堆内存使用情况
jmap -histo <pid> # 查看java进程的堆内存使用情况

jps

jps命令用于查看当前运行的java进程,输出格式如下:
PID   COMMAND             CLASS            JAR
1234  org.apache.catalina.startup.Bootstrap  org.apache.catalina.startup.Bootstrap  /usr/local/apache-tomcat-9.0.73/bin/bootstrap.jar
jps命令的常用参数:
-l:显示完整的类名和JAR包名。
-m:显示main方法的参数。
-v:显示JVM参数。
-q:只显示PID。
jps命令的使用示例:
jps -l # 显示完整的类名和JAR包名
jps -m # 显示main方法的参数
jps -v # 显示JVM参数
jps -q # 只显示PID

jstat

jstat命令用于查看java进程的内存使用情况,输出格式如下:
S0C    S1C    S0U    S1U    EC     EU     OC     OU     MC     MU     CCSC   CCSU   YGC   YGCT  FGC   FGCT  GCT
1024   1024   0      0      8192   8192   8192   8192   1024   1024   256    256    1     0.001  0     0.000 0.001
jstat命令的常用参数:
-gc:查看Java堆的使用情况。
-gccapacity:查看Java堆的容量。
-gcnew:查看新生代的使用情况。
-gcold:查看老年代的使用情况。
jstat命令的使用示例:
            jstat -gc <pid> # 查看Java堆的使用情况jstat -gccapacity <pid> # 查看Java堆的容量jstat -gcnew <pid> # 查看新生代的使用情况jstat -gcold <pid> # 查看老年代的使用情况jstat -gcmetacapacity <pid> # 查看元空间的容量jstat -gccapacity <pid> # 查看Java堆的容量

jstack

jstack命令用于查看java进程的线程堆栈信息,输出格式如下:
            "main" #1 prio=5 os_prio=0 tid=0x00007f8c4c001800 nid=0x1a03 runnable [0x00007f8c4c7ff000]java.lang.Thread.State: RUNNABLEat java.base/java.lang.Object.wait(Native Method)at java.base/java.lang.Object.wait(Object.java:328)at java.base/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)at java.base/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)at org.apache.catalina.loader.WebappClassLoaderBase.clearReferences(WebappClassLoaderBase.java:2003)
jstack命令的常用参数:
            -l:显示锁的信息。-m:显示本地方法的堆栈信息。-h:显示帮助信息。
jstack命令的使用示例:
            jstack <pid> # 查看java进程的线程堆栈信息jstack -l <pid> # 显示锁的信息jstack -m <pid> # 显示本地方法的堆栈信息jstack -h # 显示帮助信息### jmap#### jmap命令用于查看java进程的堆内存使用情况,输出格式如下:num     #instances         #bytes  class name1:           1          12345678  com.example.MyClass2:           2          23456789  java.lang.String3:           3          34567890  java.lang.Integer#### jmap命令的常用参数:-heap:查看Java堆的使用情况。-histo:查看Java堆的类实例信息。-dump:导出Java堆的快照文件。#### jmap命令的使用示例:jmap -heap <pid> # 查看Java堆的使用情况jmap -histo <pid> # 查看Java堆的类实例信息jmap -dump:live,format=b,file=heapdump.hprof <pid> # 导出Java堆的快照文件jmap -dump:format=b,file=heapdump.hprof <pid> # 导出Java堆的快照文件
## Tomcat 基础 JDK  ### Tomcat好帮手---JDKJDK是 Java 语言的软件开发工具包,JDK是整个java开发的核心,它包含JAVA工具还包括完整的 JRE(Java Runtime Environment)Java运行环境,包括了用于产品环境的各种库类,以及给开发人员使用的补充库。JDK是Java开发的基础,Tomcat是Java Web应用程序的服务器,Tomcat依赖于JDK来运行和管理Java Web应用程序。Tomcat是一个开源的Java Servlet容器和Web服务器,支持Java EE规范,提供了Servlet、JSP、EL和WebSocket等功能。Tomcat是Java Web应用程序的标准服务器,广泛用于开发和部署Java Web应用程序。### JDK包含了一批用于Java开发的组件,其中包括:javac:编译器,将后缀名为.java的源代码编译成后缀名为“.class”的字节码java:运行工具,运行.class的字节码jar:打包工具,将相关的类文件打包成一个文件javadoc:文档生成器,从源码注释中提取文档,注释需匹配规范jdb debugger:调试工具jps:显示当前java程序运行的进程状态extcheck:一个检测jar包冲突的工具apt:注释处理工具 jhat:java堆分析工具jstack:栈跟踪程序idlj:IDL-to-Java编译器。将IDL语言转化为java文件 jrunscript:命令行脚本运行war--需要使用tomcat  jar--代码里面集成了tomcat,部署一个jdkwar传统的包,  jar一般属于微服务系列------ jdk
## 企业 Tomcat 运维### Tomcat 简介Tomcat是一个开源的Java Servlet容器和Web服务器,支持Java EE规范,提供了Servlet、JSP、EL和WebSocket等功能。Tomcat是Java Web应用程序的标准服务器,广泛用于开发和部署Java Web应用程序。Tomcat是Apache软件基金会的一个项目,最初由Sun Microsystems开发,后来被Apache软件基金会接管。Tomcat是Java EE的参考实现,支持Servlet、JSP、EL和WebSocket等规范。Tomcat是一个轻量级的Web服务器,适合用于开发和测试Java Web应用程序。Tomcat可以与其他Web服务器(如Apache HTTP Server、Nginx等)结合使用,提供更高的性能和可扩展性。Tomcat是一个跨平台的Web服务器,可以在Windows、Linux、macOS等操作系统上运行。Tomcat支持多种协议,包括HTTP、HTTPS、AJP等,可以与其他Web服务器和应用程序服务器结合使用。Tomcat是一个开源的Web服务器,遵循Apache许可证2.0,允许用户自由使用、修改和分发。Tomcat是一个活跃的开源项目,拥有大量的社区支持和文档资源。 解析java代码: JAVA容器,WEB容器,WEB中间件:java容器:JVMWEB容器:Tomcat WEB中间件:Tomcat+JVMTomcat,JBOSS、resin、weblogic等   ---解析动态页面/Weblogic  ---收费。### 安装Tomcat & JDK安装时候选择tomcat软件版本要与程序开发使用的版本一致。jdk版本要进行与tomcat保持一致。### Tomcat主目录介绍- bin:存放Tomcat的启动和关闭脚本- conf:存放Tomcat的配置文件- lib:存放Tomcat的核心类库- logs:存放Tomcat的日志文件- webapps:存放Web应用程序的目录- work:存放Tomcat编译后的JSP文件和Servlet类文件- temp:存放临时文件### webapps目录介绍- ROOT:默认的Web应用程序,访问http://localhost:8080时显示的页面- examples:Tomcat自带的示例应用程序- manager:Tomcat的管理界面,用于管理Web应用程序- host-manager:Tomcat的虚拟主机管理界面- docs:Tomcat的文档目录### Tomcat配置文件目录介绍(conf)- server.xml:Tomcat的主配置文件,配置服务器的基本信息- web.xml:Tomcat的全局配置文件,配置Web应用程序的基本信息- context.xml:Tomcat的上下文配置文件,配置Web应用程序的上下文信息- tomcat-users.xml:Tomcat的用户管理配置文件,配置用户和角色信息- catalina.policy:Tomcat的安全策略配置文件,配置Java安全策略- catalina.properties:Tomcat的属性配置文件,配置Tomcat的基本属性### Tomcat的管理启动程序cd /usr/local/apache-tomcat-9.0.73/bin./startup.sh关闭程序cd /usr/local/apache-tomcat-9.0.73/bin./shutdown.sh重启程序cd /usr/local/apache-tomcat-9.0.73/bin./shutdown.sh./startup.sh### 端口:8080Tomcat默认使用8080端口,可以通过修改server.xml文件中的Connector元素来更改端口号。### server.xml配置文件server.xml是Tomcat的主配置文件,位于conf目录下。该文件主要用于配置Tomcat的基本信息,包括端口、连接器、虚拟主机等信息。以下是server.xml文件中一些重要元素的说明:- <Connector>:配置Tomcat的连接器,包括协议、端口、最大线程数等信息。- <Host>:配置虚拟主机,包括主机名、应用程序目录等信息。- <Context>:配置Web应用程序的上下文信息,包括路径、文档根目录等信息。 - <Engine>:配置Tomcat的引擎,包括名称、默认虚拟主机等信息。- <Realm>:配置Tomcat的安全域,包括用户和角色信息。### WEB站点部署#### 上线的代码有两种方式:- 第一种方式是直接将程序目录放在webapps目录下面- 第二种方式是将程序打包成WAR包,放在webapps目录下面#### 使用war包部署web站点- 将war包放在webapps目录下面,Tomcat会自动解压缩war包,并将其部署为Web应用程序。- 访问http://localhost:8080/yourapp即可访问Web应用程序。#### 手动解压war包- 将war包放在webapps目录下面,使用unzip命令解压缩war包。- 访问http://localhost:8080/yourapp即可访问Web应用程序。### 自定义默认网站目录#### 修改server.xml文件- 找到<Host>元素,修改appBase属性为自定义的目录。- 修改<Context>元素,修改path属性为自定义的路径。#### 修改web.xml文件- 找到<servlet-mapping>元素,修改url-pattern属性为自定义的路径。#### 重启Tomcat- cd /usr/local/apache-tomcat-9.0.73/bin- ./shutdown.sh- ./startup.sh### Tomcat多实例配置#### 多实例(多进程):同一个程序启动多次,分为两种情况:- 第一种情况是使用不同的配置文件启动多个Tomcat实例。- 第二种情况是使用相同的配置文件,但指定不同的端口号启动多个Tomcat实例。#### 多实例配置- 复制Tomcat目录,修改目录名称。- 例如,将/usr/local/apache-tomcat-9.0.73复制为/usr/local/apache-tomcat-9.0.73-1。- 修改conf/server.xml文件中的端口号。- 修改Connector元素中的port属性为不同的端口号。- 修改<Host>元素中的appBase属性为不同的目录。- 修改conf/web.xml文件中的上下文路径。- 修改<servlet-mapping>元素中的url-pattern属性为不同的路径。- 修改conf/context.xml文件中的上下文路径。- 修改<Context>元素中的path属性为不同的路径。- 修改bin/catalina.sh文件中的JAVA_HOME和CATALINA_HOME变量。- 修改JAVA_HOME变量为JDK的安装路径。- 修改CATALINA_HOME变量为Tomcat的安装路径。- 启动多个Tomcat实例。- cd /usr/local/apache-tomcat-9.0.73/bin- ./startup.sh- cd /usr/local/apache-tomcat-9.0.73-1/bin- ./startup.sh### tomcat反向代理集群#### 反向代理集群- 反向代理集群是指将多个Tomcat实例通过反向代理服务器(如Nginx、Apache HTTP Server等)进行负载均衡和高可用性配置。- 反向代理集群的主要优点包括:- 提高性能:通过负载均衡,将请求分发到多个Tomcat实例,提高系统性能。- 提高可用性:通过高可用性配置,当一个Tomcat实例出现故障时,其他实例可以继续提供服务。- 提高安全性:通过反向代理服务器,可以隐藏Tomcat实例的真实地址,提高系统安全性。#### Nginx反向代理集群配置##### 安装Nginxyum install nginx -y##### 创建upstream配置文件:vim /etc/nginx/conf.d/upstream.confupstream tomcat {server 192.168.233.129:8080;server 192.168.233.129:8081;}##### 创建nginx配置文件:vim /etc/nginx/conf.d/tomcat.confserver {listen 80;server_name localhost;location / {proxy_pass http://tomcat;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}### Tomcat安全优化#### telnet 管理端口保护(强制)##### 类别telnet管理端口保护##### 配置内容及说明1.修改默认的8005管理端口为不易猜测的端口(大于1024);2.修改SHUTDOWN指令为其他字符串;3.修改CATALINA_HOME/bin/catalina.sh文件中的JAVA_OPTS变量,添加-Djava.security.egd=file:/dev/./urandom参数。4.修改CATALINA_HOME/conf/server.xml文件中的<Server>元素,添加address属性,限制访问IP地址。##### 标准配置vim /usr/local/apache-tomcat-9.0.73/conf/server.xml<Server port="8005" shutdown="SHUTDOWN" >##### 备注1.8005端口是Tomcat的管理端口,默认情况下是可以被外部访问的,建议修改为不易猜测的端口。2.SHUTDOWN指令是Tomcat的关闭指令,默认情况下是可以被外部访问的,建议修改为其他字符串。3.-Djava.security.egd=file:/dev/./urandom参数是为了提高随机数生成器的性能,避免阻塞。4.address属性限制访问IP地址,可以设置为本地IP地址或内网IP地址,避免外部访问。5.以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;#### ajp 连接端口保护(推荐)##### 类别ajp连接端口保护##### 配置内容及说明1.修改默认的8009连接端口为不易猜测的端口(大于1024);2.修改CATALINA_HOME/conf/server.xml文件中的<Connector>元素,添加secret属性,限制访问IP地址。##### 标准配置vim /usr/local/apache-tomcat-9.0.73/conf/server.xml<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secret="123456" />##### 备注1.8009端口是Tomcat的ajp连接端口,默认情况下是可以被外部访问的,建议修改为不易猜测的端口。2.secret属性是Tomcat的ajp连接密码,默认情况下是可以被外部访问的,建议修改为其他字符串。3.address属性限制访问IP地址,可以设置为本地IP地址或内网IP地址,避免外部访问。4.以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;;保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器;#### 禁用管理端(强制)##### 类别禁用管理端##### 配置内容及说明1.删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件;2. 删除{Tomcat安装目录}/webapps下默认的所有目录和文件;3.将tomcat 应用根目录配置为tomcat安装目录以外的目录;##### 标准配置vim /usr/local/apache-tomcat-9.0.73/conf/web.xml<Context antiResourceLocking="false" privileged="true"><WatchedResource>WEB-INF/web.xml</WatchedResource><Parameter name="org.apache.catalina.startup.EXIT_ON_INIT_FAILURE" value="false" override="false"/><Parameter name="org.apache.catalina.startup.EXIT_ON_INIT_FAILURE" value="false" override="false"/></Context>##### 备注1.禁用Tomcat的管理端口,防止外部访问。2.以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置;3.对于前段web模块,Tomcat管理端属于tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重;#### 降权启动(强制)##### 类别降权启动##### 配置内容及说明1.修改Tomcat的启动用户为非root用户;2.修改Tomcat的安装目录和工作目录的权限为非root用户;##### 标准配置vim /usr/local/apache-tomcat-9.0.73/bin/catalina.sh#!/bin/shexport CATALINA_HOME=/usr/local/apache-tomcat-9.0.73export CATALINA_BASE=/usr/local/apache-tomcat-9.0.73##### 备注1.Tomcat的默认启动用户是root,建议修改为非root用户。2.Tomcat的安装目录和工作目录的权限是root,建议修改为非root用户。3.以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置;4.对于前段web模块,Tomcat管理端属于tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重;#### 访问日志格式规范(推荐)##### 类别访问日志格式规范##### 配置内容及说明1.修改CATALINA_HOME/conf/server.xml文件中的<Host>元素,添加Valve元素,配置访问日志格式。##### 标准配置vim /usr/local/apache-tomcat-9.0.73/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host>##### 备注1.访问日志格式规范,建议使用Common Log Format(CLF)或Combined Log Format(CLF)。2.以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置;#### 隐藏版本号##### 类别隐藏版本号##### 配置内容及说明1.修改CATALINA_HOME/conf/web.xml文件中的<servlet>元素,添加init-param元素,配置隐藏版本号。##### 标准配置<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />##### 备注1.隐藏Tomcat的版本号,防止外部攻击。2.以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置;### Tomcat性能优化#### Tomcat性能优化- Tomcat的性能优化主要包括以下几个方面:- JVM参数优化:根据实际情况调整JVM参数,提高Java虚拟机的性能。- Tomcat参数优化:根据实际情况调整Tomcat的参数,提高Tomcat的性能。- Web应用程序优化:根据实际情况优化Web应用程序,提高Web应用程序的性能。- 数据库连接池优化:根据实际情况调整数据库连接池的参数,提高数据库连接池的性能。- 缓存优化:根据实际情况调整缓存的参数,提高缓存的性能。#### 上策:优化代码该项需要开发经验足够丰富,对开发人员要求较高。#### 中策:jvm优化机制 垃圾回收机制把不需要的内存回收- 垃圾回收机制:Java虚拟机自动管理内存,定期回收不再使用的对象和数组。- 垃圾回收算法:Java虚拟机使用多种垃圾回收算法,包括标记-清除算法、复制算法、标记-整理算法等。- 垃圾回收器:Java虚拟机使用多种垃圾回收器,包括串行垃圾回收器、并行垃圾回收器、CMS垃圾回收器等。##### 内存配置优化- -Xms:设置Java堆的初始大小。# 初始堆和最大堆设为相同值,避免动态调整开销- -Xmx:设置Java堆的最大大小。# 初始堆和最大堆设为相同值,避免动态调整开销- -Xmn:设置新生代的大小。 # 年轻代大小(建议占堆的 1/3 到 1/2)- -XX:NewRatio:设置新生代和老年代的比例。- -XX:SurvivorRatio:设置Eden区和Survivor区的比例。- -XX:MaxTenuringThreshold:设置对象在新生代中存活的最大次数。堆总大小不超过物理内存的 60%~70%(预留内存给其他进程和堆外内存)。年轻代大小根据对象存活率调整:短生命周期对象多则增大年轻代。##### 堆外内存管理设置 -XX:MaxDirectMemorySize 的原则默认值如果不显式设置 -XX:MaxDirectMemorySize,默认值为 -Xmx(最大堆内存)减去一个 JVM 内部开销。例如,-Xmx4g 时,默认直接内存约为 4GB建议值一般场景:设置为堆内存的 1/4 到 1/2例如,堆内存为 4GB 时,直接内存可设置为 1GB 到 2GB。高 I/O 场景:如果应用大量使用 NIO 或 Netty,可适当增大直接内存。例如,堆内存为 8GB 时,直接内存可设置为 2GB 到 4GB。低内存场景:如果物理内存有限,需严格控制直接内存大小。例如,堆内存为 2GB 时,直接内存可设置为 512MB。#### 容器环境优化适配容器内存限制参数-XX:+UseContainerSupport           # 启用容器支持(JDK 8u191+)-XX:MaxRAMPercentage=75.0          # 限制 JVM 使用容器内存的 75%避免 OOM Killer:在 Docker 中设置内存限制略大于 JVM 堆(如 -m 5g 对应 -Xmx4g)#### 下策:加足够大的内存- 物理内存:根据实际情况增加物理内存,提高系统性能。- 虚拟内存:根据实际情况增加虚拟内存,提高系统性能。- 硬盘:根据实际情况增加硬盘,提高系统性能。- CPU:根据实际情况增加CPU,提高系统性能。- 网络:根据实际情况增加网络带宽,提高系统性能。

相关文章:

  • Python如何给视频添加音频和字幕
  • ui框架-文件上传组件
  • 在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
  • 门静脉高压——治疗
  • 智能体革命:企业如何构建自主决策的AI代理?
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(1)-宏命令制作入门与基本知识
  • C++--stack和queue的使用及其模拟实现
  • CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
  • 脚本安装Doris2.10和Doris Manager
  • 什么是OLAP?OLAP具体有哪些应用?
  • 前缀和题目:寻找数组的中心下标
  • 使用VMware克隆功能快速搭建集群
  • Linux od命令
  • 火绒弹窗拦截6.0.6.1\5.0.77.1绿色独立版_WinAll
  • 6.9-QT模拟计算器
  • 封装技术生命周期 从CDIP到CSP到SiP先进封装
  • c++学习之路1-安装部署opencv环境c++版本用visual studio
  • LLMs之StructuredOutput:大模型结构化输出的简介、常用方案、前沿框架之详细攻略
  • SSRF由浅入深
  • 重启Eureka集群中的节点,对已经注册的服务有什么影响
  • 企业网站备案怎么做/百度快照没有了用什么代替了
  • 广州led网站建设/爱站工具下载
  • 如何下载js做的网站/长尾关键词什么意思
  • 网站制作合同注意事项/上海seo优化服务公司
  • 清河网站建设/百度联系电话多少
  • 岳阳汨罗网站建设/磁力狗在线