Tomcat(Java web 环境搭建)

Tomcat(Java web 环境搭建)

安装

简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache独立的进程单独运行的。当在一台机器上配置好Apache服务器,可利用它响应HTML页面的访问请求。搭建集群一般使用动静分离,默认监听端口8080

Tomcat(Java web 环境搭建)

javaweb环境:Nginx+JDK+Tomcat+MySQL

Tomcat(Java web 环境搭建)
Tomcat(Java web 环境搭建)

安装tomcat

安装JDK(java解析器)
JDK

Tomcat(Java web 环境搭建)

JAVA:
JDK8.0版本
tomcat使用8.5版本

JDK二进制包安装方式:
二进制包安装法:直接解包使用,不需要编译,需要配置环境变量
yum安装
yum list | grep jdk

Tomcat(Java web 环境搭建)

yum -y install java-1.8.0-openjdk.x86_64
查看版本

Tomcat(Java web 环境搭建)

JDK源码包安装安装方式(可选,可以跳过):
上传软件包
tomcat.zip
解压包
unzip tomcat.zip
cd tomcat
解压jdk包
tar xf jdk-7u25-linux-x64.tar.gz
复制目录
cp -r jdk1.7.0_25/ /usr/local/gdk1.7

配置JDK的环境变量
vim /etc/profile

Tomcat(Java web 环境搭建)

source /etc/profile
检测java是否安装成功
java -version

Tomcat(Java web 环境搭建)

安装tomcat
解包移动
tar xf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat85
ln -s /usr/local/tomcat85 /usr/local/tomcat

配置Tomcat 的环境变量
vim /etc/profile

Tomcat(Java web 环境搭建)

开启tomcat
/usr/local/tomcat/bin/startup.sh

配置文件及架构详解

tomcat目录详解:

Tomcat(Java web 环境搭建)

webapps 网站根目录(类似于httpd的html)
网页文件:/usr/local/tomcat85/webapps/ROOT/WEB-INF/web.xml

tomcat中conf目录中配置文件详解

Tomcat(Java web 环境搭建)

tomcat总体架构(server、service、connector、contiainer)

Tomcat(Java web 环境搭建)

简介

server
Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,Tomcat中只有一个Server,一个Server可以包含至少一个Service,用于具体提供服务,一个Service可以有多个Connector和一个Container,Tomcat有多个Connector,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接

service
Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:
1、Connector,可支持的每秒最大连接数,用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
2、Servlet:一个Servelet,就是一个线程一次的执行过程
3、Container用于封装和管理Servlet,以及具体处理Request请求;

server、service中的connector和container三者关系

Tomcat(Java web 环境搭建)

多个Connector 和一个Container就形成了一个 Service,有了Service就可以对外提供服务了,但是Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,所以整个Tomcat 的生命周期由Server控制。

Server标签设置的端口号为8005,shutdown=”SHUTDOWN” ,表示在8005端口监听“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。一个Server有一个Service,当然还可以进行配置,一个Service有多个,Service左边的内容都属于Container的,Service下边是Connector

Tomcat(Java web 环境搭建)

总结:将Tomcat看作一个大酒店,酒店中有一个酒店老板(server:掌握着整个酒店的命脉和管理权),酒店中还有许多吃饭的分部,比如说西餐区,中餐区(service),每个分部都有服务员来接待你(connector),不同服务员接待不同客人(http请求的客人找8080端口对应的服务员,JK2服务请求的找8009对应的服务员),服务员将请求交给后端Container处理,通过后厨主管(Engine引擎)将需求交送给不同大厨(Host域名),大厨将任务交给小厨们(context不同路径下的内容)处理,让他们去做菜。

架构细分详解

Connector架构

Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。

Tomcat(Java web 环境搭建)

ProtocolHandler由包含了三个部件:Endpoint、Processor、Adapter
* Endpoint用来处理底层Socket的网络连接
acceptor接收器:服务员接受客户点菜的消息
Handler处理器:服务员将请求记录在点菜单上
* Processor用于将Endpoint接收到的Socket封装成Request
服务员将点菜单打包起来
* Adapter适配器用于将Request交给Container进行具体的处理
服务员确定将包起来的点菜单适配提交给哪个大厨

Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的,而Processor用来实现HTTP协议的,Adapter将请求适配到Servlet容器进行具体的处理。

Container架构

Tomcat(Java web 环境搭建)

4个子容器的作用分别是:
Engine(厨房主管):引擎,用来管理多个站点,一个Service最多只能有一个Engine;买菜分配菜的
Host(大厨):代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;大厨
Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;大厨下面的小厨,负责做菜(处理请求)
Wrapper:每一Wrapper封装着一个Servlet;小厨做好菜后交给传菜员
最后交给服务员,然后再交到客户的手上

总结

先理解下概念:

server 五星级大酒店老板
service 餐饮部 (多个部门)
connector 是服务员(多个)
东北人点菜都由翠花负责http请求对应http连接器
客户:服务员翠花点菜 –> request
服务员接收客户的电点菜请求 —>acceptor
服务员翠花把客人点的菜记录在本上 –>handler
点完菜的,确认后在再信封中-->processor 封装
确定向哪个后厨部门上交包装后的点菜单-->adapter
交给后厨 container
engine 分配菜的厨房主管
host 大厨师
context 做菜的小厨师
wrapper 菜
Servlet 传菜员
connector 服务员翠花上菜 –>客户

实际意义

1.1Server
Server 服务器的意思,代表整个 tomcat 服务器,一个 tomcat 只有一个 Server
1.2Service
一个 Server 可以包含多个 Service ,Service 接收客户端的请求,然后解析请求,完成相应的业务逻辑,然后把处理后的结 果返回给客户端
1.3Connector
称作连接器,一个 Service 可以有多个 Connector,主要是连接客户端请求,用于接受(acceptor)处理(handler)请求并将请求封装(processor)成 Request 和 Response,适配(adaptor)后交给 Container 进行处理,Container 处理完之后在交给 Connector 返回给客户端。
1.4Container
Service 的另一个核心组件,按照层级有 Engine,Host,Context,Wrapper 四种,一个 Service 只有一个 Engine,其主要作用是执行业务逻辑这儿,我们先说明一下容器的包含关系。Engine包含多个Host,Host包含多个Context,Context包含多个Wrapper,每个Wrapper对应一个Servlet。我们如何来理解各个容器呢?Tomcat又为什么要把容器分成这4种呢?
(1). Engine,我们可以看成是容器对外提供功能的入口,每个Engine是Host的集合,用于管理各个Host(一个 Engine下面可以包含多个 Host,即一个 Tomcat 实例可以配置多个虚拟主机,使得一个服务器实例可以承担多个域名的服务)。
(2). Host,我们可以看成虚拟主机(webapp),一个tomcat可以支持多个虚拟主机。
(3). Context,又叫做上下文容器,我们可以看成应用服务,每个Host里面可以运行多个应用服务(webapps 下的每个目录都是一个应用,其中 ROOT 目录中存放主应用,其他目录存放别的子应用)。
(4). Wrapper,是Servlet(Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。)的抽象和包装,每个Context可以有多个Wrapper,用于支持不同的Servlet。

connector运行模式

简介

在Tomcat8.5之前(8.0版本之前),Tomcat同时支持BIO,NIO,NIO2(即AIO),APR这4种IO方式,其中NIO2为8.0之后新增的,自8.5之后移除了对BIO的支持。

Tomcat(Java web 环境搭建)

查看当前运行模式

方式一:启动后利用catalina日志查看
grep -i handler /usr/local/tomcat85/logs/catalina.out

Tomcat(Java web 环境搭建)

可以发现tomcat默认运行模式位NIO模式

方式二:通过tomcat管理界面查看
启动tomcat,进入 http://IP:8080/,会看到如下三个按钮:

Tomcat(Java web 环境搭建)

Server Status:进入服务器状态
App Host:管理服务器上部署的应用
Manager:管理主机界面

修改tomcat-users.xml配置文件后重启服务:
vim /usr/local/tomcat85/conf/tomcat-users.xml

<role rolename="manager-gui"/> //对应第二个按钮权限
<role rolename="admin-gui"/>   //对应第三个按钮权限
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/>
Tomcat(Java web 环境搭建)

需要在配置文件中加入
vim /usr/local/tomcat85/conf/Catalina/localhost/host-manager.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
Tomcat(Java web 环境搭建)

从status页面也可以看到connector的运行模式

Tomcat(Java web 环境搭建)
Tomcat(Java web 环境搭建)
Tomcat(Java web 环境搭建)

架构

通常前端部署WEB服务器(nginx或Apache)

由于增加了WEB服务器的请求转发处理,虽然此时单独请求性能必定低于直连Servlet容器(增加了一层请求转发),但整体性能却要好于直连方式
原因
通过WEB服务器的负载均衡机制,可以大大降低单台服务器的负载,从而提升请求处理效率
可以充分利用WEB服务器在静态资源处理上的性能的优势,提升WEB应用静态处理的速度(nginx+tomcat动静分离)
对于处理web服务器和tomcat之间效率的问题
AJP 采用二进制格式进行传输,这样会降低每次请求发送的数据包的大小,便于web服务器与servlet直接的通信

Tomcat(Java web 环境搭建)

阻塞、非阻塞、同步、异步

同步和异步指的是具体的消息通信机制
同步时,调用者等待返回结果。异步时,调用者不会立刻得到结果,而是等待被调用者会通过回调等形式通知调用者。
例子:
同步:老王开水的时候,每隔一段时间自己看看水开了没有
异步:老王开水的时候用了响水壶,不用每隔一段时间就要去看水开了没有,而是等响水壶响了之后,让水壶通知他水开了

阻塞与非阻塞指调用者在等待返回结果时的状态
阻塞时,调用结果返回在前,当前线程会被挂起,并在得到结果之后返回。非阻塞时,如果不能离开得到结果,该调用不会阻塞当前线程,因此对于非阻塞的情况,调用者需要定时轮询查看处理状态
例子:
阻塞:老王等水开的过程时,老王干坐在那里啥也不干,就等水开了才干下一件事
非阻塞:老王等水开的过程中,还能去上网

例子总结推导

同步阻塞
老王不用响水壶(调用者自己去持续等待结果,而不是等待被调用者的通知),干坐在一旁等水开(当前线程被挂起),时不时看看水开了没有(一直检查是否有新的请求)
异步阻塞
老王用响水壶(被调用者通过状态通知和回调通知调用者),干坐一旁啥也不干就等水开(线程挂起),但是不需要时不时去看水开了没,水壶响了就会通知他
同步非阻塞
老王不用响水壶(不用等状态通知去通知他),然后去上网(非阻塞),每隔一段时间还要回来看看水开了没(经常来回跑,上下文切换,挺累)
异步非阻塞
老王用响水壶(等待被调用者调用),然后去上网(非阻塞),也不用来看水开了没,水开了水壶会自动通知他

connecter四种模式以及应用场景:

TCP/IP连接步骤
TCP/IP通过Socket在客户端与服务端建立双向连接以实现通信,其主要步骤如下
1.服务端监听某个端口是否有连接请求;
2客户端向服务端发送连接请求;
3.服务端向客户端返回Accpect(接受)消息,此时连接成功;
4.客户端和服务端通过send(),write()等方法与对方通信。
5.关闭连接
BIO模式
BIO((blocking I/O))同步并阻塞
客户端有连接请求时服务器端就需要启动一个线程进行处理
缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。

NIO模式
NIO同步非阻塞
服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理
拥有比传统I/O操作(bio)更好的并发运行性能。Tomcat8在Linux系统中默认使用这种方式

NIO2模式
NIO2(AIO)异步非阻塞
是JDK 7中增加的文件及网络IO特性,继承于NIO
异步:
服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
非阻塞
客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理
配置方法

 <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
               connectionTimeout="20000"
               redirectPort="8443" />

应用场景
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
NIO2(AIO)方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

APR模式
特点
通过调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作
高度可扩展性以及优越性,并且可以更好的与前端的服务器集成

 APR模式实现

#安装依赖环境
[root@tomcat ~]#  yum install apr-devel openssl-devel
#下在native 
[root@tomcat ~]#  wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.23/source/tomcat-native-1.2.23-src.tar.gz
[root@tomcat ~]#  cd /usr/src/tomcat-native-1.2.23-src/native/
[root@tomcat ~]# tar xf tomcat-native-1.2.23-src.tar.gz -C /usr/src/
#编译安装  
[root@tomcat native]# ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/java8/ --with-ssl=yes --prefix=/usr/local/tomcat/ && make && make install
#--with-java-home指定jdk环境位置
#--with-ssl是否使用ssl
#--prefix指定tomcat安装路径
#安装成功后,会在tomcat的lib目录下生成以下内容
[root@tomcat ~]# ll /usr/local/tomcat/lib/libtcnative*
-rw-r--r-- 1 root root 2127160 3月   9 02:03 /usr/local/tomcat/lib/libtcnative-1.a
-rwxr-xr-x 1 root root    1031 3月   9 02:03 /usr/local/tomcat/lib/libtcnative-1.la
lrwxrwxrwx 1 root root      23 3月   9 02:03 /usr/local/tomcat/lib/libtcnative-1.so -> libtcnative-1.so.0.2.23
lrwxrwxrwx 1 root root      23 3月   9 02:03 /usr/local/tomcat/lib/libtcnative-1.so.0 -> libtcnative-1.so.0.2.23
-rwxr-xr-x 1 root root 1206888 3月   9 02:03 /usr/local/tomcat/lib/libtcnative-1.so.0.2.23
[root@tomcat ~]# vim /usr/local/tomcat/conf/server.xml
vim /usr/local/tomcat/conf/server.xml
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />
[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
[root@localhost conf]# grep -i "http-apr-8080" /usr/local/tomcat/logs/catalina.out 
09-Mar-2020 02:11:41.803 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
09-Mar-2020 02:11:42.648 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]

Tomcat优化

简介

进程和线程有什么区别
1、基本区别
进程:进程是操作系统资源分配的基本单位,就是一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程
线程:进程中任务调度和执行的基本单位,(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,多个线程可共享数据。
2、执行条件
每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中
3、影响关系
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

JVM内存优化
Tomcat亦是一个Java应用程序。JVM某种程度上可以被认为是一个虚拟的操作系统,它有着自己的内存模型等;一个Tomcat容器的启动,相当于在JVM中启动了一个进程。

Tomcat与JVM关系:
一个Tomcat是一个进程,其中有很多线程(线程多少与多少app无关);
一个Tomcat启动一个JVM,可以部署多个APP,这些APP处于同一个JVM中,但不可以互相调用

JVM虚拟机内存分配
分配给不同的数据区域

Tomcat(Java web 环境搭建)

栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。

详解
*堆是虚拟机管理内存的最大一块,也是被所有线程共享的内存区域
*虚拟机栈,线程的私有空间。虚拟机栈在编译器存放了基本数据类型,对象引用及局部变量
*本地方法栈与虚拟机栈发挥相似作用,虚拟机栈为执行Java方法服务,而本地方法栈则为虚拟机是要用的Native服务
*程序计数器是唯一一个没有任何规定OOM情况的区域,是一个比较小的内存空间。每条线程都需要一个独立的程序计数器

JVM内存调整

简介
tomcat非常吃内存,经常会出现OOM,默认JVM虚拟机内存分配大小,可以通过管理界面的stats来查看:
查看初始内存

Tomcat(Java web 环境搭建)

vim /usr/local/tomcat85/bin/catalina.sh

Tomcat(Java web 环境搭建)

重启
/usr/local/tomcat85/bin/shutdown.sh
/usr/local/tomcat85/bin/startup.sh

Tomcat(Java web 环境搭建)

 JVM相关监控

相关概念:

要求JDK使用源码包安装
jps(JVM Process Status Tool)显示指定系统内所有的HotSpot虚拟机进程

内存泄漏
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。一般也会造成OOM

Tomcat(Java web 环境搭建)
Tomcat(Java web 环境搭建)

jstat
(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
格式: jstat [选项] 虚拟机PID [连续输出的间隔时间] [连续输出次数]
选项
-gc垃圾回收堆的行为统计,常用命令
-gcutil垃圾回收统计的汇总信息,以百分比的形式显示

jmap
jmap命令是用来查看当前系统中jvm进程heap dump的情况,包括对象的数量,对象所占内存的大小。因此jmap命令可以用于检查内存泄漏、对象创建不合理及销毁等问题
格式:jmpa [选项] PID
选项:
-heap :打印jvm heap的情况
-histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live : 同上,但是只答应存活对象的情况
-permstat: 打印permanent generation heap情况
jmap -dump:format=b,file=dumpfile.hprof
将日志信息输出到当前路径,文件名dumpfile.hprof pid 进程号

jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息

jhat
jhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令。是java虚拟机自带的一种虚拟机堆转储快照分析工具

编写内存监控界面

Tomcat(Java web 环境搭建)

压缩传输

Tomcat作为一个应用服务器,也是支持 gzip 压缩功能的,可以在server.xml 配置文件中的 Connector节点中配置,来实现对指定资源类型进行压缩。
压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。但是,压缩会增加Tomcat的负担,因此最好采用Nginx+ Tomcat或者Apache+Tomcat方式,将压缩的任务交由Nginx/Apache去做。

实验操作:
vim /usr/local/tomcat85/conf/server.xml

Tomcat(Java web 环境搭建)

详解
compression="on" # 打开压缩功能
compressionMinSize="50" # 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla, traviata" # 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些资源类型需要压缩

并发连接调优

在主配置文件server.xml配置文件中的connector中设置

Tomcat(Java web 环境搭建)

详解
maxThreads 表示最大线程数
minSpareThreads初始化空闲线程数
maxSpareThreads 最大空闲线程数
acceptCount监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时

add:maxThreads是Tomcat所能接受最大连接数。一般设置不要超过8000以上,如果网站访问量非常大,可以使用运行多个Tomcat实例的方法,在一个服务器上启动多个tomcat然后做负载均衡处理

IO优化(运行模式调优)

默认使用NIO
protocol="org.apache.coyote.http11.Http11Nio2Protocol"

Tomcat(Java web 环境搭建)

Tomcat的共享线程池的调优

Tomcat(Java web 环境搭建)

name:线程池名称
namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber
maxThreads:池中最大线程数
minSpareThreads:线程池中最小空闲线程数(核心线程)
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁
maxQueueSize:在被执行前最大线程排队数目
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程
threadPriority:线程池中线程优先级
className:线程池实现类

禁用DNS查询

当web应用程序想要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址。
修改属性enableLookups参数值: enableLookups="false"如果为true,进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。

Tomcat(Java web 环境搭建)

添加Listener

Server标签中可以配置多个Listener,其中JreMemoryLeakPreventionListener是用来预防JRE内存泄漏

<Listener className=“org.apache.catalina.core. JreMemoryLeakPreventionListener”>

Tomcat(Java web 环境搭建)

版本号隐藏

为了避免黑客针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息

步骤
cd /usr/local/tomcat85/lib
jar xf catalina.jar
ls

Tomcat(Java web 环境搭建)

cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'

Tomcat(Java web 环境搭建)

cd org/apache/catalina/util
vim ServerInfo.properties
server.info=nolinux

Tomcat(Java web 环境搭建)

重启
/usr/local/tomcat85/bin/shutdown.sh
/usr/local/tomcat85/bin/startup.sh

cd /usr/local/tomcat85/lib/
cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'

Tomcat(Java web 环境搭建)

Tomcat多实例

通常,我们对Tomcat单机部署需求可以分为几种
单实例单应用 (一个Tomcat一个web应用)
单实例多应用 (一个Tomcat多个web应用)
多实例单应用 (多个Tomcat都部署一个应用)
多实例多应用 (多个Tomcat部署多个不同的应用)
Tomcat中部署项目的方式:
方法一:在主配置文件sever.xml中的节点中,通过部署;
方法二:将Web 项目文件直接拷贝到Webapps目录下就可以了;
方法三:在conf目录下的Catalina\localhost目录下新建一个xml文件,在该文件配置;
方法四:直接将war上传至网站目录后,重启即可;
方法五:通过Tomcat管理界面的Manager App部署。

补充知识点

CPU密集型(CPU-bound)
大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound,CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多
CPU程序:CPU bound的程序一般而言CPU占用率相当高。这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽掉了等待I/O的时间
IO密集型(I/O bound)
IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作

发布者:LJH,转发请注明出处:https://www.ljh.cool/5950.html

(0)
上一篇 2020年8月29日 上午1:48
下一篇 2020年9月21日 下午9:24

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注