Tomcat的安装即使用

Tomcat的概念

Tomcat服务器是Java语言开发的,免费的开放源代码的Web应用服务器。

Tomcat处理静态HTML的能力远不及Apache或者Nginx,通常是作为一个Servlet和JSP容器,单独运行在后端。

Tomcat是由三个功能组合而成:

java servlet:Tomcat是一个servlet容器,负责管理和执行java-servlet,服务端的java程序,处理客户端的http请求后台响应

java server:服务端的配置,pages动态页面的技术就是由Java代码完成的,tomcat既可以作为以java代码为基础的动态页面,也可以处理和转发动态请求。

Tomcat的并发能力很差,仅适用于小项目

Tomcat核心组件

web容器:处理web请求,影响,动态页面的展示

jsp容器:解析index.jsp中java代码转换为servlet的代码,然后servlet编译执行。

jsp是一种技术模板,类似于html语言,允许在html文件当中,嵌入java代码

servler容器:接受web容器的请求,负责加载,初始化,执行和管理
connector:接受外部的请求已经响应请求

container:包含了engine host context webapp四个组件组成

service:包含了connector和container

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

host;代表一个虚拟主机,也可以理解为站点

context:对应web应用

wrapps:最终的封装器,容器的最底层,index.jsp

Tomcat的安装

安装java

c 复制代码
apt -y install openjdk-8-jdk-headless

把apache-tomcat安装包放到opt目录下并解压

重命名为tomcat并移到/usr/local/目录下

tomcat目录下的内容:

bin:启动和关闭脚本文件

conf:tomcat的配置文件

logs:tomcat的日志文件

webapps:保存不同项目的应用目录

work:工作目录

temp:临时文件保存目录

c 复制代码
切换到/usr/local/bin目录下,执行
./startup.sh
#开启tomcat
netstat -antp | grep 8080
#查看端口是否正常启动

在浏览器上输入对应的网址加上8080端口,查看网页是否正常

配置多台虚拟主机

c 复制代码
cd /usr/local/tomcat/webapps
mkdir test1 test2
cd test1/
vim index.jsp
	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 1,http://www.test1.com");%>
	</body>
	</html>
	保存退出
cd ../test2
vim index.jsp
	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 1,http://www.test2.com");%>
	</body>
	</html>
	保存退出
cd /usr/local/tomcat/conf
vim server.xml
	<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>

	<Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" />
    </Host>
    保存退出
cd ../conf
./startup.sh
vim /etc/hosts
	192.168.42.20 www.test1.com www.test2.com
	保存退出

www.test1.com域名

www.test2.com域名

Tomcat的优化和动静分离

Tomcat的优化

默认的安装情况下,tomcat经常会假死的情况,所以tomcat需要进行优化

优化的三个方面

1、tomcat的配置优化

2、操作系统的内核优化

3、jvm调优

tomcat的配置优化

c 复制代码
在tomcat的配置文件的第69行
 <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
             redirectPort="8443"
             maxThreads="500"
             minSpareThreads="50"
             enableLookkups="false"
             disableUpploadTimeout="true"
             acceptCount="300"
            processorCache="500"
             URIEncoding="UTF-8"
              compression="on"
              compressionMinSize="2048"
            compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"/>

8080: tomcat对外提供访问的默认端口

protocol: 默认的协议就是http/1.1

connectionTimeout:连接的超时时间 20000毫秒=20秒

redirectPort:如果是https,自动转到8843,为https协议服务的

maxThreads="500" :tomcat可以创建最大的线程数

minSpareThreads="50":空闲线程的最小数量,用来处理溢出部分的请求

enableLookkups="false":禁用反向解析,提高访问速度

disableUpploadTimeout="true":开启上传的超时时间,连接在上传期间不存在超时的情况

acceptCount="300":当线程都在忙碌的时候,可以排队等待处理的请求数量

processorCache="500":连接器可以缓存的最大处理的数量

URIEncoding="UTF-8":设置字符集编码

compression="on":开启响应内容的压缩功能

compressionMinSize="2048":如果文件大小超过2M(2048KB),才会进行压缩。

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png":支持被压缩的文件类型,包括HTML、XML、JavaScript、CSS、纯文本、GIF图像、JPEG图像和PNG图像。

c 复制代码
在网页浏览tomcat的配置
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
	第20行
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />改成
allow=.*/>
vim /usr/local/tomcat/conf/tomcat-user.xml
第22行
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

可以在网页上查看tomcat的配置

操作系统的内核优化

在/etc/sysctl.conf文件配置操作系统的内核优化

net.ipv4.ip_forward=0 #开启服务数据的路由功能

net.ipv4.tcp_syncookies=1 #启动SYN cookies功能,避免tcp SYN的攻击

net.ipv4.tcp_max_tw_buckets=6000 #系统中允许出现的最大的time_wait的数量

net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse:#启用TIME_WAIT套接字快速回收和重用。

vm.overcommit_memory=0:#控制内存超额分配策略,避免OOM killer杀掉进程。

net.ipv4.ip_local_port_range=1024 65000

net.ipv4.tcp_window_scaling=1:#启用TCP窗口缩放功能,允许大窗口的TCP传输。

net.ipv4.conf.default.accept_source_route:#不接受源路由,增加网络安全性。

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

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

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

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

jvm优化

c 复制代码
vim /usr/local/tomcat/bin/catalina.sh
第119行
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true -XX:+DisableExplicitGC"
解析
$JAVA_OPTS -server jvm服务端的优化:
-Xms2048m:设置JVM分配的最小内存为2048MB。
-Xmx2048m:设置JVM分配的最大内存为2048MB。
2核4G:设置成的内存
官方建议,初始大小核最大值设置成一样的值,一般是物理内存大小的一般
-Xmn768m:设置新生代的内存大小为768,建议设置成整个堆内存大小的3/8
-XX:ParallelGCThreads=2:设置资源回收器的线程数量是2
-XX:MetaspaceSize=128m:设置元空间的初始大小
-XX:MaxMetaspaceSize=512m:设置元空间的最大值,元:都是保存数据的核心信息
-Djava.awt.headless=true :启用无图形界面的模式,防止在linux系统下,web页面无法正常显示图片
-XX:+DisableExplicitGC:垃圾回收机制的信息在后台显示

内存匹配改变

Eden Space: 堆内存 用来存储新创建的对象,这一部分的是完全分配给新创建的对象使用

G1 Old Gen:堆内存 存储的是长时间活动的对象

Survivor Space :堆内存,存储中中生代的对象

CodeHeap 'non-nmethods':非堆内存,存储已经编译的代码

CodeHeap 'non-profiled nmethods':非堆内存,已经被压缩的类定义

CodeHeap 'profiled nmethods':非堆内存当中的元数据信息

Compressed Class Space:存储已压缩的类定义

Metaspace:元数据空间的大小

ajp:ajp是一种协议,ajp协议:是tomcat服务端和前端的服务器进行连接的协议

作用:提供负载均衡和高效请求的转发

nio:nio技术:异步非阻塞通信

和前端服务器通信的端口是8009

Tomcat的动静分离

c 复制代码
nginx1服务器
vim nginx.conf
	upstream tomcat {
	server 192.168.42.30:8080 weight=3;
	server 192.168.42.40:8080 weight=2;
	}
	...
	location ~* \. jsp$ {
		proxy_pass http://tomcat;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header HOST $host;
		#设定后端服务器收到的请求访问的主机名,域名,ip端口。默认的proxy_pass
		#指定的主机名,是代理的主机名,不是客户端的真实主机名	
	}
	保存退出
	systemctl  restart nginx
tomcat第一台
cd /usr/local/tomcat/webapps
mkdir test1 
cd test1/
vim index.jsp
	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 1,http://www.test1.com");%>
	</body>
	</html>
	保存退出
	cd /usr/local/tomcat/conf
vim server.xml
	<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>
tomcat第二台
cd ../test2
vim index.jsp
	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 2,http://www.test2.com");%>
	</body>
	</html>
	保存退出
cd /usr/local/tomcat/conf
vim server.xml
	<Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" />
    </Host>
    保存退出
cd ../conf
./startup.sh


按照以下配置配置出tomcat的动静分离

客户端: 浏览器

nginx1: 调度器 192.168.42.20

nginx2 静态页面 192.168.42.30

nginx3 静态页面 192.168.42.40

tomcat1: 后端服务器1 动态 192.168.42.21

tomcat2: 后端服务器2 动态 192.168.42.22

c 复制代码
调度器
cd /usr/local/nginx/conf
vim nginx.donf
	#全局
	stream {
		upstream xy104 {
			server 192.168.42.30:80;
			server 192.168.42.40:80;
		}
		server {
			listen 81;
			proxy_pass xy104;
		}
	}
	
	保存退出
systemctl restart nginx

nginx2的配置
cd  /usr/local/nginx/html
vim index.html
	this is xy104
	保存退出
cd ../conf
vim nginx.conf
	#http模块
	upstream tomcat {
		server 192.168.42.21:8080;
		server 192.168.42.22:8080;
	}
	#server模块
	server {
	....
	keepalive_timeout 0;
	location ~* \.jsp$ {
		proxy_pass http://tomcat;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded-for;
		proxy_set_header Host $host;
	}
	....
	}
	保存退出
systemctl  restart nginx

nginx3的配置
cd /usr/local/nginx/html
vim index.html
	this is xy105
	保存退出
cd ../conf
vim nginx.conf
#http模块
	upstream tomcat {
		server 192.168.42.21:8080;
		server 192.168.42.22:8080;
	}
	#server模块
	server {
	....
	keepalive_timeout 0;
	location ~* \.jsp$ {
		proxy_pass http://tomcat;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded-for;
		proxy_set_header Host $host;
	}
	....
	}
	保存退出
systemctl restart nginx
 
 tomcat1的配置
 cd /usr/local/tomcat/webapps
 mkdir test1
 cd test1/
 vim index.jsp
 	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 1,http://www.test1.com");%>
	</body>
	</html>
	保存退出
cd /usr/local/tomcat/conf
vim server.xml
	<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>
cd ../bin
./shutdown.sh
./startup.sh

tomcat2的配置
 cd /usr/local/tomcat/webapps
 mkdir test2
 cd test2/
 vim index.jsp
 	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
	<html>
	<head>
	<title>JSP test1 page</title>
	</head>
	<body>
	<% out.println("动态页面 2,http://www.test2.com");%>
	</body>
	</html>
	保存退出
cd /usr/local/tomcat/conf
vim server.xml
	<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" />
</Host>
cd ../bin
./shutdown.sh
./startup.sh



相关推荐
ssxueyi30 分钟前
Java 常见Exception异常解决方法
java·开发语言·数据库·异常处理·exception
xzq_java33 分钟前
Javafx.麦当劳点餐系统(Java简洁版)
java·sql
silver68734 分钟前
jvm内存优化
java
lzz的编码时刻36 分钟前
观察者模式:事件处理机制与松耦合设计
java·开发语言·设计模式
yun_shui_39 分钟前
【力扣-KMP】28.找出字符串第一个匹配项的下标
java·数据结构·算法·leetcode
lvyuanj1 小时前
IDEA skywalking 启动报错 ClassNotFoundException InstanceConstructorInterceptor
java·intellij-idea·skywalking
上海拔俗网络1 小时前
“AI全网络深度学习系统:开启智能时代的新篇章
java·团队开发
轩辕Ruins1 小时前
idea无法编译src/main/java下的xml或者properties文件
java·intellij-idea
Bang邦2 小时前
解决 MyBatis 中空字符串与数字比较引发的条件判断错误
java·mybatis·ognl·sql动态查询
Tech Synapse2 小时前
Java 动态设置 JVM 参数的方法
java·开发语言·jvm