前言:
- tomcat安装部署
- 虚拟主机配置
- tomcat优化
下载网站:
一:Tomcat介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
- 由Apache、Sun和一些公司及个人共同开发而成
- 伸手Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
二:Tomcat核心组件
servlet代码是由java写的一个后端
jsp是一个前端页面,最终也会被翻译成servlet代码区执行
tomcat的可以看作一个容器,是由三大组件组成
WEB容器:TCP/IP协议,http
Serlet容器:后端,处理java,html
JSP容器:前端,处理动态网页
三:Tomcat处理请求过程
connector 连接对象,开放端口
8080端口基于http协议,coyote 接收
container 容器
engine 引擎
host 虚拟主机
context 内容,加载程序
运行servlet,
然后依次返回
四:Tomcat部署步骤
1.下载并安装jdk
2.安装并启动Tomcat
3.配置虚拟主机
jdk是编译器,把源码文件转换成可执行文件
jdk目前在用的是1.8,现在如果学习的话,就用jdk1.11
以java为例,
abc.java通过编译器可以变成abc.class
环境变量:PATH
用户环境变量:只针对用户有效,换了一个用户就不生效
系统环境变量:只针对主机生效,换了一个用户依旧生效 bin目录
javac 命令是 编译的意思
把java————》class
java是执行命令 执行class
eclipse-inst-win64是编写软件开发环境
jdk是一个编译器引擎
先装jdk
以管理员身份运行,点两个下一步,安在C盘最好,以免出现故障
java se 是基础阶段
jre实际上是jvm虚拟机
jdk里面运行的是lib函数库,比如排列工具
bin下面是命令
把目录复制下来,C:\Program Files\Java\jdk1.8.0_181\bin
修改
粘贴到开头,用分号隔开
然后确定
打开cmd验证
此时jdk可以算是安装好,接下来安装环境
java开发环境idea或者eclipse
以管理员身份运行
在线安装
点击同意
下一步
下一步
在线安装会出现网速过慢的情况
出现之后,勾选,同意
然后再打开
这个指的是项目的存储路径
然后点击Launch
若是遇到更新组件,直接更新即可
开发界面
点击下一步
jar log4j
然后右键src,new,class
windows下的preferences
左键双击
字体选择consolas
然后应用关闭
访问权限,内文件,文件名
void 代表没有返回值,返回的话写return
main是主进程名称,程序的入口,程序的入口只能有一个,出口可以有多个
小括号里是数组,数组名称string
idea:
Java 学习目标
开发环境部署 IDE jdk1.8特性了解 jvm原理(垃圾回收机制)
变量 变量类型字节长度 整形:int Long 浮点:float(单精度) double(双精度) 布尔:boolean (true,false)
字符:char (Kava的英文字符,占两个字节) 字符串:String 枚举类型
条件判断 if if-else if-else-if switch
循环语句 单循环 双循环 嵌套
数组 二维数组
二维数组的第一个中括号代表一维数组个数
第二个中括号代表一维数组中的元素个数
函数 静态函数(可以直接在main中使用) (动态函数需要创建对象才能使用) 带参传入 返回值
——————面向对象特性————
封装、继承、多态(重点)
继承,继承上一级的特性,多态是自身的特性
————————————————————
接口 API 面向接口编程
异常处理
集合框架 List Map
IO 文件流 字符流(适合处理文本数据) 字节流(适合处理图片、视频,文本也可以等) (实现数据持久化的雏形),把内存的文件存储到硬盘中
多线程 thread 锁机制(重点学习了解原理)
网络编程(选学) 网络聊天平台
————————————————————JavaEE——————————————————————————
————初级————
HTML CSS JavaScript(重点) jQuery 前端
servlet(重点,后端:服务端) JSP(用的不多)
jdbc 连接数据库
Mysql 数据库 (DML,DDL,DCL,DQL 事务、视图、索引、存储过程、数据库编程)
备份恢复(冷热、物理逻辑备份、完全差异增量备份、、直接恢复、断点恢复)
————中级————SSM框架
mybaits 框架 spring 框架 (IOC 控制反转、AOP面向切面编程) spring MVC (模式、视图、控制)
高级
spring boot spring cloud docker 分布式 微服务
五:下载JDK
- jdk是java语言的软件开发工具包
- jdk是Tomcat运行的必要环境
- 根据计算机硬件配置,选择安装包
- 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.tml
六 :设置环境变量
6.1 编辑/etc/profile文件
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
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
6.2 使环境变量生效的命令
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
6.3 查看jdk版本的命令
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
七:安装、启动Tomcat
7.1 下载安装包
[root@localhost ~]# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz
7.2 将安装包移动到/usr/local下重命名
[root@localhost opt]# mv apache-tomcat-9.0.16/ /usr/local/tomcat9
7.3 启动Tomcat
[root@localhost bin]# ls
bootstrap.jar ciphers.sh daemon.sh setclasspath.bat startup.sh version.bat
catalina.bat commons-daemon.jar digest.bat setclasspath.sh tomcat-juli.jar version.sh
catalina.sh commons-daemon-native.tar.gz digest.sh shutdown.bat tomcat-native.tar.gz
catalina-tasks.xml configtest.bat makebase.bat shutdown.sh tool-wrapper.bat
ciphers.bat configtest.sh makebase.sh startup.bat tool-wrapper.sh
[root@localhost bin]# /usr/local/tomcat/bin/startup.sh
7.4 演示:
7.4.1 安装环境包jdk,优化环境变量
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
apache-tomcat-9.0.16.tar.gz tomcat优化压测.jmx
epel-release-latest-7.noarch.rpm jdk-8u201-linux-x64.rpm
[root@localhost abc]# rpm -ivh jdk-8u201-linux-x64.rpm
warning: jdk-8u201-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8-2000:1.8.0_201-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@localhost abc]# cd /usr/
[root@localhost usr]# ls
bin etc games include java lib lib64 libexec local sbin share src tmp
[root@localhost usr]# cd java/
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin lib src.zip
COPYRIGHT LICENSE THIRDPARTYLICENSEREADME-JAVAFX.txt
include man THIRDPARTYLICENSEREADME.txt
javafx-src.zip README.html
jre release
//jre用来存放虚拟机jvm,函数库lib,命令bin
用户环境变量、系统环境变量
[root@localhost jdk1.8.0_201-amd64]# ls bin/
appletviewer javafxpackager jdb jrunscript pack200 unpack200
ControlPanel javah jdeps jsadebugd policytool wsgen
extcheck javap jhat jstack rmic wsimport
idlj javapackager jinfo jstat rmid xjc
jar java-rmi.cgi jjs jstatd rmiregistry
jarsigner javaws jmap jvisualvm schemagen
java jcmd jmc keytool serialver
javac jconsole jmc.ini native2ascii servertool
javadoc jcontrol jps orbd tnameserv
export 声明全局变量
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
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
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
java环境其实已经默认装好了:实例,openjdk是一个简化版本
[root@localhost ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
默认的是openjava,但是有些组件不支持
7.4.2 安装tomcat
[root@localhost jdk1.8.0_201-amd64]# tar zxvf /abc/apache-tomcat-9.0.16.tar.gz -C /opt
[root@localhost jdk1.8.0_201-amd64]# cd /opt
[root@localhost opt]# ls
apache-tomcat-9.0.16 httpd-2.4.29 nginx-1.12.2 rh
[root@localhost opt]# mv apache-tomcat-9.0.16/ /usr/local/tomcat9
[root@localhost opt]# cd /usr/local
[root@localhost local]# ls
apache2 etc include lib64 nginx share tomcat9
bin games lib libexec sbin src
[root@localhost local]# cd tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
webapps 站点
[root@localhost bin]# ls
bootstrap.jar ciphers.sh daemon.sh setclasspath.bat startup.sh version.bat
catalina.bat commons-daemon.jar digest.bat setclasspath.sh tomcat-juli.jar version.sh
catalina.sh commons-daemon-native.tar.gz digest.sh shutdown.bat tomcat-native.tar.gz
catalina-tasks.xml configtest.bat makebase.bat shutdown.sh tool-wrapper.bat
ciphers.bat configtest.sh makebase.sh startup.bat tool-wrapper.sh
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# systemctl stop firewalld.service
[root@localhost bin]# setenforce 0
[root@localhost bin]# netstat -natp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 28345/java
[root@localhost bin]# netstat -natp | grep 80
tcp6 0 0 :::8080 :::* LISTEN 28345/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 28345/java
tcp6 0 0 :::8009 :::* LISTEN 28345/java
[root@localhost bin]# netstat -natp | grep java
tcp6 0 0 :::8080 :::* LISTEN 28345/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 28345/java
tcp6 0 0 :::8009 :::* LISTEN 28345/java
优化tomcat
[root@localhost conf]# ln -s /usr/local/tomcat9/bin/startup.sh /usr/bin/
[root@localhost conf]# ln -s /usr/local/tomcat9/bin/shutdown.sh /usr/bin/
主配置文件为server.xml
[root@localhost bin]# cd /usr/local/tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd conf/
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# pwd
/usr/local/tomcat9/conf
[root@localhost conf]# cd ..
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd lib/
[root@localhost lib]# ls
annotations-api.jar el-api.jar tomcat-coyote.jar tomcat-i18n-ko.jar tomcat-util-scan.jar
catalina-ant.jar jasper-el.jar tomcat-dbcp.jar tomcat-i18n-pt-BR.jar tomcat-websocket.jar
catalina-ha.jar jasper.jar tomcat-i18n-cs.jar tomcat-i18n-ru.jar websocket-api.jar
catalina.jar jaspic-api.jar tomcat-i18n-de.jar tomcat-i18n-zh-CN.jar
catalina-storeconfig.jar jsp-api.jar tomcat-i18n-es.jar tomcat-jdbc.jar
catalina-tribes.jar servlet-api.jar tomcat-i18n-fr.jar tomcat-jni.jar
ecj-4.9.jar tomcat-api.jar tomcat-i18n-ja.jar tomcat-util.jar
[root@localhost lib]# cd /usr/java/
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
COPYRIGHT javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@localhost jdk1.8.0_201-amd64]# cd jre/
[root@localhost jre]# ls
bin lib plugin THIRDPARTYLICENSEREADME-JAVAFX.txt Welcome.html
COPYRIGHT LICENSE README THIRDPARTYLICENSEREADME.txt
[root@localhost jre]# cd lib/
[root@localhost lib]# ls
amd64 fontconfig.bfc hijrah-config-umalqura.properties management
applet fontconfig.properties.src images management-agent.jar
calendars.properties fontconfig.RedHat.5.bfc javafx.properties meta-index
charsets.jar fontconfig.RedHat.5.properties.src javaws.jar net.properties
classlist fontconfig.RedHat.6.bfc jce.jar oblique-fonts
cmm fontconfig.RedHat.6.properties.src jexec plugin.jar
content-types.properties fontconfig.SuSE.10.bfc jfr psfontj2d.properties
currency.data fontconfig.SuSE.10.properties.src jfr.jar psfont.properties.ja
deploy fontconfig.SuSE.11.bfc jfxswt.jar resources.jar
deploy.jar fontconfig.SuSE.11.properties.src jsse.jar rt.jar
desktop fontconfig.Turbo.bfc jvm.hprof.txt security
ext fontconfig.Turbo.properties.src locale sound.properties
flavormap.properties fonts logging.properties tzdb.dat
[root@localhost lib]# cd security/
[root@localhost security]# ls
blacklist blacklisted.certs cacerts java.policy java.security javaws.policy policy trusted.libraries
[root@localhost security]# vim java.security
' 117 securerandom.source=file:/dev/urandom
//优化启动时间
[root@localhost security]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost security]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
八:Tomcat启动时间
-
缩短启动时间的命令
-
修改文件/usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security
-
[root@localhost security]# vim /usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security ' 117 securerandom.source=file:/dev/urandom //优化启动时间
九:Tomcat目录结构
lib java的函数库,第三方组件包
jar,组件包
首页站点都在webapps
后面的class文件都可以直接拖进去
十:虚拟主机配置
- 有多个项目同时运行时,一台服务器不建议运行多个Tomcat服务,需要配置虚拟主机
- 通过两个域名访问到不同的项目内容
10.1步骤
10.1.1创建kgc和accp项目目录和文件
10.1.2修改Tomcat主配置文件
- /usr/local/tomcat/conf/server.xml的部分
10.1.3重启Tomcat服务
如果使用脚本,/,就需要使用sleep休眠一下
10.1.4测试
域名 工作目录(不是站点) 是否更新服务器中的WAR包 是否自动部署,即时生效 是否支持xml文件验证 是否对xml的空间启用
context docbase 站点 path设定为空,代表加载默认列表 重载功能开启
10.2 实操演示
10.2.1 安装dns服务
[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.conf
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; };
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
zone "accp.com" IN {
type master;
file "accp.com.zone";
allow-update { none; };
};
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
dynamic named.ca named.localhost slaves
data named.empty named.loopback
[root@localhost named]# cp -p named.localhost kgc.com.zone
[root@localhost named]# vim kgc.com.zone
[root@localhost named]# cat kgc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.247.202
[root@localhost named]# cp -p kgc.com.zone accp.com.zone
[root@localhost named]#
[root@localhost named]# systemctl start named
[root@localhost named]# systemctl stop firewall
Failed to stop firewall.service: Unit firewall.service not loaded.
[root@localhost named]# setenforce 0
10.2.2 开启客户机测试bind服务
10.2.3 先创建站点,创建两个站点,默认站点在ROOT中
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
apache2 bin etc games include lib lib64 libexec nginx sbin share src tomcat9
[root@localhost local]# cd tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]#
创建两个站点,默认站点在ROOT中
[root@localhost webapps]# cd ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg bg-middle.png bg-upper.png index.jsp tomcat.css tomcat.png tomcat.svg
bg-button.png bg-nav.png favicon.ico RELEASE-NOTES.txt tomcat.gif tomcat-power.gif WEB-INF
[root@localhost ROOT]# cd ..
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]# mkdir kgc accp
[root@localhost webapps]# ls
accp docs examples host-manager kgc manager ROOT
[root@localhost webapps]# cd accp/
[root@localhost accp]# vim index.jsp
<h1>this is accptest</h1>
[root@localhost accp]# cd ../kgc/
[root@localhost kgc]# vim index.jsp
<h1>this is kgc</h1>
可以使用tree去查看这两个目录验证里面是否创建成功文件,没有这个命令的话就yum安装tree
[root@localhost webapps]# tree kgc/ accp/
kgc/
└── index.jsp
accp/
└── index.jsp
0 directories, 2 files
10.2.4 修改配置文件创建虚拟主机
[root@localhost kgc]# cd ../../conf
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
上面是默认存在的网站
166-172为增加内容
162 pattern="%h %l %u %t "%r" %s %b" />
163
164 </Host>
165
166 <Host name="www.accp.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlVa lidation="false" xmlNamespaceAware="false">
167 <Context docBase="/usr/local/tomcat9/webapps/accp" path="" reloadable="true"/>
168 </Host>
169
170 <Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlVal idation="false" xmlNamespaceAware="false">
171 <Context docBase="/usr/local/tomcat9/webapps/kgc" path="" reloadable="true"/>
172 </Host>
173
174 </Engine>
175 </Service>
176 </Server>
这是默认的网站
[root@localhost bin]# ./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost bin]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
10.2.5 验证
十一:TOMcat优化
- 操作系统优化(内核参数优化)
- Tomcat配置文件参数优化
- Java虚拟机(JVM)调优
11.1 Tomcat配置文件参数优化
- 如果对代码进行了动静分离处理,静态页面和图片等数据就不需要做Tomcat处理,也就是不需要在tom中配置压缩
最大线程
最小空闲线程
最大空闲线程
字符集
连接超时
域名
关闭上传超时
如果https时,那么端口就会定义到8443
processorcache 缓存对象
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
69 <Connector port="8080" protocol="HTTP/1.1"
70 connectionTimeout="20000"
71 redirectPort="8443" />
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]#
对原有配置属性的进行压测
在客户端先安装jdk,配置环境变量,然后打开压测包
双击打开
找到指定文件,打开
在里面打开压测脚本,完成之后会生成压测报告,把压测报告保存表格数据(在聚合报告的下面保存),然后查看
多试几次
整理
接下来进行优化
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
compresssion="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"/>
重启服务
[root@localhost ~]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -natp | grep 80
tcp6 0 0 :::8080 :::* LISTEN 109429/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 109429/java
tcp6 0 0 :::8009 :::* LISTEN 109429/java
tcp6 0 0 ::1:43008 ::1:8080 TIME_WAIT -
tcp6 0 0 127.0.0.1:35988 127.0.0.1:8005 TIME_WAIT -
tcp6 0 0 ::1:59856 ::1:8009 TIME_WAIT -
再次测试
平均值降低了
十二:Tomcat官方文档
- 阅读官方文档,可以深入学习tomcat配置参数相关知识
- http://tomcat.apache.org/tomcat-9.0-doc/config/http.html
十三:jmeter压测工具
13.1 步骤
1.从oracle官方下载jdk安装包,在客户端安装jdk
2.运行jmeter软件
3.选择压测脚本
4.开始进行压测
5.查看优化前压测结果
十四:Tomcat优化参数
- server.xml配置参数
- 原始:
- 修改后的:
超时时间的单位是毫秒
compression是压缩
压缩最小阈值,
- 聚合报告
十五:Tomcat优化步骤
- server.xml 配置参数
- 重启Tomcat服务器
- 查看优化后的聚合报告
- 从测试结果看,优化后的平均值和90%响应时间比优化前要快
十六:Java 虚拟机(JVM)调优
- Tomcat启动命令行中的优化参数
- 正确选择不同的GC策略,调整JVM、GC的参数,可以极大的减少因GC工作而导致的程序运行中断的问题
GC就是垃圾回收机制
16.1 JVM参数
- ${JAVA_HOME}/bin目录下catalina.sh文件
- Java_OPTS设置JVM相关运行参数的变量
这个是对内存的堆和栈的优化
java的变量分为值类型和引用类型
16.2 Java垃圾回收机制
- 堆大小决定了虚拟机花费在收集垃圾上的时间和频度
堆区相当于仓库,栈相当于展架,废弃物交给GC
堆和栈都在内存中
本地方法库是管理方法
-
堆大小决定了虚拟机花费在收集垃圾上的时间和频度
-
调整堆大小的目的是最小化垃圾收集的时间,在特定的时间内最大化处理客户的请求
-
在基准测试的时候,为确保最好的性能,要把堆的大小设大,确保垃圾收集不在整个基准测试的过程中出现
-
常见的优化GC参数 ————/usr/local/tomcat/bin/catalina.sh
十七:JVM常见错误
17.1 常见错误之JVM Heap (堆)溢出
- java.lang.OutOfMemoryError: Java heap space
- JVM启动时,自动设置JVM Heap的值
- 初始空间(-Xms)是物理内存的1/64
- 最大空间(-Xmx)不可超过物理内存
- 如果98%时间用于GC,且可用的Heap size不足2%,JVM将抛出此异常————java不会像linux中有临时交换空间用以临时存放
- 解决方法
- 手动设置JVM Heap (堆)的大小
17.2PermGen space 溢出
- java.lang.OutOfMemoryError:PermGen space————Permanent Generation space,内存的永久保存区域
- 内存主要存放Class和Meta信息
- Class在被Load时被放入PerGen space区域,而sun的GC不会再主程序运行期对PerGen space进行清理
- 如果APP载入很多CLASS,就可能出现PermGen space 溢出
- 解决方法
- 手动设置 MaxPermSize大小
17.3栈溢出
- jiva.lang.StackOverflowError
- JVM是采用栈式的虚拟机,函数调用过程是堆栈的操作
- 通常栈的大小是1-2MB的
- 函数的“层”若是太多,会造成栈区溢出
- 解决办法
- 修改程序,减少函数的“层数“