目录
概念
编辑JSP
servlet
java
JDK:java development kit (套件)
JRE:java Runtime Enviroment
JVM:java virtual machine
常见的网页类型:
部署Tomcat使用jsp链接mysql
Tomcat工作模式、端口
Tomcat部署:
下载tomcat运行环境 jdk
Tomcat:
MySQL-Connector-Java
Tomcat-native:
安装JDK
卸载openjdk:
上传所需软件包
解压jdk
配置JDK环境变量
查看java环境变量
安装tomact
解压软件包
重命名目录
查看tomcat
各目录文件用途
Tomcat启动脚本
添加执行权限
建立系统服务文件
启动tomcat
添加开机自启
查看是否启动
查看端口
测试tomcat
浏览器访问
点击manager APP
创建管理manger APP用户
tomcat以上还需增加以上配置
Tomcat架构与术语
Tomcat结构图
两大组件:Connector和Container
HTTP请求过程
搭建基于域名的web站点
修改server.xml配置文件
创建测试web网页
修改hosts
windows修改改hosts
重启tomcat
网页测试:
安装tomcat-Native
tomcat-native下载地址
解压
预编译
编译安装
添加库文件
使配置文件生效
重启tomcat
查看启动日志是否支持 native
安装mysql
创建测试数据
测试jsp 链接MySQL
安装mysql-connector
创建测试页面
测试
创建并发布WAR 文件
Tomcat优化
隐藏版本信息
隐藏HTTP头部版本信息
隐藏404页面出现的版本号
解压catalina.jar 包
修改ServerInfo.properties文件
将修改后的信息压缩会jar包
删除解压目录
编辑 测试:
编辑Tomcat 中的三种运行模式之运行模式的优化
BIO(Blocking IO,阻塞式):
NIO (Non-blocking IO,非阻塞IO):
修改配置文件
重启tomcat
查看:
APR:Apache Portable Runtime
Tomcat 执行器(线程池)的优化
开启线程池
开启并使用线程池
连接器(Connector)优化
禁用AJP连接器
修改conf下的server.xml文件,将AJP服务禁用掉。
重启tomcat
禁用8005端口
Tomcat中JVM参数优化
堆内存(heap)
方法区
JVM参数优化
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,实现了对Servlet(容器)和Java Server Page(JPS)(动态页面)的支持,使用HTTP或https协议与客户端(通常是浏览器)进行通信。
Tomcat 和 apache、nginx 等 Web 服务器一样,具有处理 HTML静态页面功能,但Tomcat处理静态html 能力不如 nginx 和apache服务器
可以使用nginx配合使用实现静动分离
Web server只能完成静态资源的请求。
Servlet 容器能够进行动态资源请求。
JSP:全名为Java Server Pages,中文名叫java服务器页面,是一种动态网页开发技术,形成JSP文件,后缀名为(*.jsp)。
jsp是可以跨平台运行,既能在Linux下运行,也能在其他操作系统上运行
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,当tomcat收到静态资源请求会直接处理,收到动态资源请求将会调用servlet(连接器),主要处理jsp的程序,生成web内容
处理过程:
1.客户端发送请求至服务器端
2.服务器将请求信息发送至servlet
3.servlet 生成响应内容并传给服务器
4.服务器将响应以动态网页返回给客户端
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),提供了 java的开发环境和运行环境,jsp是基于jdk上的
安装目录介绍:
bin:主要存放的是java的编译器、解析器等工具
jre:java runtime environment ——java运行时环境。 在jre 子目录中,JDK使用的Java运行时环境(JRE)的实现。JRE包括Java虚拟机(JVM),类库和支持用java语言编写的程序执行的其他文件
jre/bin:java平台所使用的工具或者可执行程序
jre/lib:jre在运行的时候需要的一些类库、属性设置、资源文件
lib:java开发工具要是用的一些类库,包含了支持JDK工具的核心类库,tools.jar、dt.jar...
src.zip:源代码。在src.zip中,构成Java核心API的所有类的Java编程语言源文件(即java.*,javax.和一些org.包的源文件,但不包括com.sun.的源文件包)
是指 Java 的运行环境,是指 java 的使用者,运行JAVA编写程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JVM是Java Virtual Machine(Java虚拟机)。java编写的代码需要在虚拟机上运行,为了解决和底层硬件和操作系统的兼容性问题,一个java通过编译生成字节码之后,在 JYM上运行,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码)可以做到跨平台运行,可移植性高,做到一次编译,到处运行。
JVM是运行在操作系统之上的,它与硬件没有直接的交互。
HTML&HTM:HyperText Markup Language 超文本连接标示语言 .html .htm
ASP: Active Server Page 动态服务器页面(微软开发) .asp
ASP.net: ASP的下一个版本,网页后缀如.aspx
PHP: Hypertext Preprocessor 超级文本预处理言 .php .php5 .phps
JSP: JAVA Server Pages 由java语言编写的
模式:B/S 模式 客户端浏览器和服务端
端口:8080
jdk工具下载:https://www.oracle.com/cn/java/technologies/javase/downloads/#java8
tomcat下载:Apache Tomcat® - Apache Tomcat 8 Software Downloads
MySQL :: MySQL Community Downloads
选择5.1.47版本,因为我们mysql是5.7版本的,选择tar包下载
Tomcat Native 提高tomcat性能包,提高tomcat处理静态页面的性能。这个软件在tomcat的bin目录下已经提供,不用单独去下载了!
安装之前需要查看下系统是否安装了openjdk,如安装了openjdk 先卸载,否则安装不了oracle官方的jdk
yum remove java-* -y
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
JAVA_HOME=/usr/local/jdk1.8.0_171 #jdk的安装路径
PATH=$JAVA_HOME/bin:$PATH #将jdk的bin目录添加环境变量
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar #类库的路径添加变量
export PATH JAVA_HOME CLASSPATH
[root@tomcat ~]# source /etc/profile 使环境变量生效
java -version
tar -zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.5.42/ tomcat
注:Tomcat有两种安装方式,一种是直接解压就可以使用的二进制文件,第二种是编译安装。
bin:存放启动和关闭tomcat执行脚本。
conf :存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml。
lib: 存放Tomcat运行需要的库文件(jar),包含Tomcat使用的jar文件。unix平台此目录下的任何文件都被加到Tomcat的classpath中。
logs:存放Tomcat执行时的LOG文件。
webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录,即供外界访问的web资源的存放目录
webapps/ROOT:tomcat的家目录
webapps/ROOT/ index.jsp:Tomcat的默认首页文件
work:存放jsp编译后产生的class文件或servlet文件存放
temp:存放Tomcat运行时所产生的临时文件
conf目录中一些关键文件说明:
server.xml文件:用于配置和server相关的信息,tomcat的端口号、配置host 主机 配置 context
web.xml文件:在web.xml文件中定义servlet
tomcat-users.xml 文件:配置tomcat 的用户密码与权限。
context.xml:配置每个web站点的配置文件
catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数
catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties:日志系统相关的配置
bin目录中一些关键程序说明:
#bat为windows下的脚本(批处理)
#sh为Linux下的脚本,Shell
#catalina.sh是一个最关键的脚本,其他的启动脚本如startup.sh,shutdown.sh,start、stop 都会调 catalina.sh脚本
vim /etc/init.d/tomcat
#!/bin/bash
# Tomcat init script for Linux
# chkconfig: 2345 96 14
# discription: The Apache Tomcat Server/JSP container
JAVA_HOME=/usr/local/jdk1.8.0_171/
CATALINA_HOME=/usr/local/tomcat
start_tomcat=$CATALINA_HOME/bin/startup.sh #tomcat启动文件
stop_tomcat=$CATALINA_HOME/bin/shutdown.sh #tomcat关闭文件
start() {
echo -n "Starting tomcat: "
${start_tomcat}
echo "tomcat start ok."
}
stop() {
echo -n "Shutting down tomcat: "
${stop_tomcat}
echo "tomcat stop ok."
}
# See how we were called
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 5
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
exit 0
注释:
chkconfig:2345是默认启动级别,级别有0-7个级别,当tomcat启动到2345级别自动启动。
96启动优先级,14停止优先级,优先级范围0-100,数字越大,优先级越低。
JAVA_HOME=/usr/local/jdk1.8.0_171/ 指定JAVA目录
CATALINA_HOME=/usr/local/tomcat #指定tomcat路径
$CATALINA_HOME/bin/catalina.sh $* #指定tomcat运行脚本
chmod +x /etc/init.d/tomcat
chkconfig可以添加系统服务,centos7开始使用systemd来管理系统服务,在/lib/systemd/system目录下创建tomcat.service文件把tomcat添加为系统服务,我们就可以使用systemctl来管理tomcat
vim /lib/systemd/system/tomcat.service
[Unit]
Description=tomcat
After=network.target #在网卡启动后,启动
[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_171/
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/etc/init.d/tomcat start
ExecStop=/etc/init.d/tomcat stop
ExecRestart=/etc/init.d/tomcat restart
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload #重载service文件
只要修改了.service文件都需要执行这条命令,重载service文件
systemctl start tomcat
systemctl enable tomcat
ps -ef | grep tomcat
三个端口:8080提供web服务的端口,接收连接客户的请求。
8005为管理端口,这个端口监听关闭tomcat的请求,shutdown会向该端口发送的关闭服务器的命令
8009端口为第三方服务程序调用的端口,负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个
拒绝访问,因为这个页面需要我们配置一个账号密码,来访问
注:如果你需要查看 Tomcat 的运行状态可以配置tomcat管理员账户,然后登陆 Tomcat 后台进行查看
1.修改tomcat-users.xml配置文件
vim /usr/local/tomcat/conf/tomcat-users.xml
角色说明:
1. “manager-gui”:Allows access to the html interface(允许通过web的方式登录查看服务器信息)
2.“manager-script”: Allows access to the plain text interface(允许以纯文本的方式访问)
3.“manager-jmx”: Allows access to the JMX proxy interface(允许jmx的代理访问)
4.“manager-status”: Allows access to the read-only status pages(允许以只读状态访问)
5.admin-gui: 允许访问HTML GUI
6. admin-script: 允许访问文本接口
vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
#允许任意客户端登入
vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
正则表达式:\d+\ d代表任意一个数字。+代表至少一个或多个
重启tomcat:
systemctl restart tomcat
测试访问:
查看jvm大小配置可以到控制台“Server Status”页面,tomcat默认没有用户所以无法登录控制台,所以需要先配置用户以使能登录控制台
Free memory--当前分配给jvm的内存中还剩余的内存。
Total memory--当前分配给jvm的内存大小。
Max memory--最大可分配给jvm的内存大小。
修改jvm的内存大小:
编缉$CATALINA_HOME/bin/catalina.sh,在最前面(注释除外)添加:
JAVA_OPTS='-Xms512m -Xmx1024m
-Xms:表示内存初始分配大小,启动时向系统申请的内存大小。
-Xmx:表示最大可分配给 jvm 的内存大小,一般建议堆的最大值设置为可用内存的最大值的80%
重启tomcat是配置生效,登录server status,查看配置是否生效;
执行ps查看JVM参数设置
Tomcat 6/7/8 的配置参数,有些许不一样,可以参考官网文档
文档:http://192.168.1.11:8080/docs/config
网络版本:
Tomcat 6 文档:https://tomcat.apache.org/tomcat-6.0-doc/config
Tomcat 7 文档:https://tomcat.apache.org/tomcat-7.0-doc/config/
Tomcat 8 文档:https://tomcat.apache.org/tomcat-8.0-doc/config/
Tomcat主要组件:服务器server,服务service ,连接器Connector、容器Container,连接器和容器是Tomcat核心。
Tomcat 中最顶层是server,代表服务器,一个服务器可包含多个服务。
Service主要包含两个部分:Connector和Container 它们的作用:
Connector用于处理连接,提供Socket与Request(请求)和Response(响应)相关的转化。
Container用于封装和管理Servlet,以及具体处理Request请求。
1.Connector
一个Connecter将在某个指定的端口上侦听客户请求,接受客户端浏览器 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,会产生一个线程把请求交给引擎Engine(Container中的一部分)处理,从Engine出获得响应并返回客户
一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接
Connector 功能就是接收连接请求然后分配线程让 Container 来处理这个请求,多线程的处理
HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,AJP/1.3 Connector在端口8009处侦听其他Web Server(其他的HTTP服务器)的Servlet/JSP请求
Web客户访问Tomcat服务器上JSP组件的两种方式:
http协议访问端(默认为8080),负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
AJP协议访问端口(默认为8009端口),负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器
2.Container
Container用于封装和管理Servlet,以及具体处理Request请求,在Container内部包含了4个子容器
1)Engine:引擎,用于来管理多个web站点,一个Service最多只能有一个Engine,Engine用来接收并处理从Connector发来的请求,把处理的结果响应给客户端,一个Engine可以包含一个或多个Host。
Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理。Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理
2)Host:每个host和某个网络域名Domain Name相匹配,每个 host 都可以部署一个或者多个Web APP ,当Host获得一个请求时,将把该请求匹配到某个应用上,通过 path=" " 来进行匹配的
3)Context:一个Context对应于一个Web 应用,web应用由一个或者多个 Wrapper 组成
4)Wrapper:每一Wrapper封装着一个Servlet
Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的组件。
Tomcat Server处理一个HTTP请求的过程
1.客户端打开浏览器,建立tcp连接 请求被发送到本机端口8080 发给连接器
2.连接器把该请求传递给Engine(引擎)来处理
3.Engine获得请求,匹配所有host
4.Engine匹配到某域名的Host,(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)Host获得请求 比如是 /test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为path=””的Context去处理)
5.通过 path 读取 index.jsp 文件
6.处理完成后构建的响应报文
7.Context把执行完之后的 HttpServletResponse (响应报文)对象返回给Host
8.Host 把响应报文对象返回给Engine
9。Engine 把响应报文对象返回给Connector(连接器)
10.Connector把响应报文对象返回给客户端
ls /usr/local/tomcat/conf/
server.xml是Tomcat的主配置文件(全局),服务器设置的,例如端口设置,路径设置
在末尾上面添加
name指定虚拟主机的名称,使用对应的ip将无法访问,如果需要使用 ip 来访问,需要把 host 的name属性改成ip即可
appBase指定应用程序(网站)的根目录,这里可以存放多个程序(网站),一般是相对路径,相对于tomcat的安装目录
Context path=""为虚拟目录,如果是空,表示直接就是/ ,如果是 path=“ aa ”。访问时就是:域名或IP:8080/aa
docBase="……" 为实际目录,可以是绝对路径,如果是相对路径就是基于appBase
name | 指定虚拟主机名字 |
debug | 指定日志级别 |
appBase | 指定web的目录,可以指定绝对目录和相对路径,没有指定默认为/webapps |
unpackWARs | 此选项为true,先解压目录结构在允许,为false,允许WAR自动解开 |
autoDeploy | 如此选型为true,当tomcat运行时监测appbase下的文件,有新的web应用加入进来,会自动发布web应用,为false需重启tomcat服务 |
alias | 指定web的别名,可以指定多个别名 |
deployonstartup | 如为true,则表示tomcat服务器启动时会自动发布appbase目录下所有的web应用,如web应用在server.xml没有相应元素,则将采用默认Context配置,默认为true |
其余属性的含义可以参考以下:
https://tomcat.apache.org/tomcat-8.5-doc/config/host.htm
mkdir -p /www/html/{web1,web2}
echo "www.hjl.com" > /www/html/web1/index.html
echo "www.hjl.cn" > /www/html/web2/index.html
vim /etc/hosts
C:\Windows\System32\drivers\etc
192.168.30.66 www.hjl.com
192.168.30.66 www.hjl.cn
systemctl restart tomcat
Tomcat 可以使用 apr 来提供更好的伸缩性、性能,优化tomcat 提升性能APR 提升的是静态页面处理能力,基于 ARP(Apache Portable(轻便) Runtime)技术
Apache Tomcat® - Tomcat Native Downloads
Tomcat8 在本身提供安装包无需下载,需要安装依赖包
安装依赖
tomcat依赖于apr
yum install -y apr apr-devel gcc gcc-c++ openssl-devel openssl
cd /usr/local/tomcat/bin/
tar zxf tomcat-native.tar.gz -C /usr/local/src/
cd /usr/local/src/tomcat-native-1.2.21-src/native/
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/jdk1.8.0_171/ --with-ssl
make && make install
tomcat库文件存放位置 /usr/local/apr/lib 使lib下的库文件在tomcat能加载,把/usr/local/apr/lib路径放到/etc/ld.so.conf里
vim /etc/ld.so.conf
/usr/local/apr/lib
[root@tomcat native]# ldconfig
echo "ldconfig" >> /etc/rc.local #开启开机运行
chmod +x /etc/rc.d/rc.local #给予执行权限
添加完ldconfig并无法立即引用类库变量,我们可以做软连接解决:
ln -s /usr/local/apr/lib/* /usr/lib
systemctl restart tomcat
此过程略过
mysql -uroot -p123
create database tomcat; #创建tomcat数据库
create table tt(id int,name varchar(20)); #创建tt测试表
insert into tt values (1,"tom1"),(2,"tom2"); #插入数据
grant all on tomcat.* to tomcat@'192.168.30.%' identified by 'tomcat'; #授权
flush privileges; #刷新授权
Jsp链接mysql,官方提供了工具: mysql-connector
1)解压缩软件包
因为之前已经上传过软件包,这里直接解压软件包
tar zxf mysql-connector-java-5.1.47.tar.gz -C /usr/local/src/
cd /usr/local/src/mysql-connector-java-5.1.47/
2)复制 jar 文件到 tomcat 的 lib 目录下
[root@tomcat mysql-connector-java-5.1.47]# cp mysql-connector-java-5.1.47.jar /usr/local/tomcat/lib/
重启tomcat
systemctl restart tomcat
vim /usr/local/tomcat/webapps/ROOT/mysql.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*"%>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://192.168.30.22/tomcat?user=tomcat&password=tomcat&useUnicode=true&characterEncoding=utf-8";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from tt";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){%>
step:<%=rs.getString(1)%>
context:<%=rs.getString(2)%>
<%}%>
<%out.print("Congratulations!!! JSP connect MYSQL IS OK!!");%>
<%rs.close();
stmt.close();
conn.close();
%>
修改mysql的 IP地址等
注意:代码复制注意核对,由于编码问题,复制到vim中可能会增加多余的%号,记得删除
Tomcat既可以运行采用开放式目录结构的Web应用,也可以运行WAR文件,在Web应用的开发阶段,为了便于调试,通常采用开放式的目录结构来发布Web应用,这样可以方便地更新或替换文件。如果开发完毕,进入产品发布阶段,应该将整个Web应用打包为WAR文件,再进行发布
在本例中,操作步骤发布web
1)进入web1应用的根目录/www/html/web1
cd /www/html/web1
2)把整个Web应用打包为web1.war文件
tar cvf web1.war ./*
如 需打开web1文件:
jar cvf helloapp.war ./*
3)把web1.war文件拷贝到/webapps目录下
cp web1.war /usr/local/tomcat/webapps/
4)删除原先的web1目录
5)重启tomcat
Tomcat服务器启动时,会把/html目录下的所有WAR文件自动展开为开放式的目录结构
编辑server.xml 文件 为connector 添加 server属性
vim /usr/local/tomcat/conf/server.xml
重启tomcat服务
systemctl restart tomcat
验证结果:
有时候为了服务器安全很多信息是不能显露出来了,这其中就包含了tomcat服务器的版本号
修改前:
针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar
进入tomcat的lib目录找到catalina.jar文件
jar xvf catalina.jar
进入org/apache/catalina/util 编辑配置文件ServerInfo.properties
cd org/apache/catalina/util
vim ServerInfo.properties
server.info=APP Srv/1.0
server.number=1.0
cd /usr/local/tomcat/lib/
jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
[root@tomcat lib]# rm -rf META-INF/ org/
重启tomcat
systemctl restart tomcat
netstat -anplt | grep java
Tomcat支持三种接收请求的处理方式:BIO、NIO、APR
阻塞模式,tomcat7v版本以下使用此模式,每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景
非阻塞模式,是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,异步处理方式,一个进程可处理多个请求,tomcat 8版本及以上默认就是在NIO模式下允许
查看catalina.out启动日志运行时的NIO
在tomcat8中有最新的nio2,速度更快,建议使用nio2。
vim /usr/local/tomcat/conf/server.xml
改为: protocol="org.apache.coyote.http11.Http11Nio2Protocol"
systemctl restart tomcat
或者在启动Tomcat后,在/usr/local/tomcat/logs/catalina.out日志中查看
APR(Apache Portable Runtime/Apache可移植运行时),Tomcat apr也是在Tomcat上运行高并发应用的首选模式
从操作系统级别来解决异步的IO问题,大幅度的提高性能。必须要安装apr和native,直接启动就支持apr
实际就是之前安装native
在conf/server.xml中修改8080端口对应Connector
重启tomcat,查看启动日志:
Tomcat 默认是没有启用线程池,在 Tomcat 中每一个用户请求都是一个线程
使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。
56行、59行删除注释,打开连接池配置:
添加选项
重要参数:
name:共享线程池名称,Connector 为了共享线程池要引用的名字,该名字必须唯一
namePrefix:在 JVM 上,每个运行线程都可以有一个 name 字符串。这一属性为线程池中每个线程的 name 字符串设置了一个前缀,Tomcat 将把线程号追加到这一前缀的后面
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~1000,根据硬件设施和业务来判断
minSpareThreads:最小空闲线程数,Tomcat初始化时创建的线程数,默认设置25
maxSpareThreads:最大空闲线程数,一旦空闲线程超过这个值,Tomcat就会关闭不再需要的线程
prestartminSpareThreads在Tomcat初始化的时候就初始化minSpareThreads 的参数值,如果不等于 true,minSpareThreads的值就没啥效果了
maxQueueSize:最大的等待队列数,超过则拒绝请求
在connector中设置executor属性指向上面的执行器
vim /usr/local/tomcat/conf/server.xml
Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息,默认情况下Tomcat支持200线程访问,超过这个数量的连接将被等待甚至超时放弃我们需要提高这方面的处理能力
打开tomcat安装目录\conf\server.xml文件,找到Connector的配置部分
port 代表服务接口;protocol代表协议类型
connectionTimeout 代表连接超时时间,单位为毫秒
redirectPort 代表安全通信(https)转发端口,一般配置成443
参数说明:
maxThreads:最大线程数。
minSpareThreads:最小空闲线程数
acceptCount:接受最大队列长度,当队列满时收到的任何请求将被拒绝
maxConnections:在任何给定的时间服务器接受并处理的最大连接数
connectionTimeout:超时等待时间(毫秒)
tcpNoDelay:如果为true,服务器socket会设置TCP_NO_DELAY选项,在大多数情况下可以提高性能。缺省情况下设为true
compression:是否开启压缩GZIP 。可接受的参数的值是“off ”(禁用压缩),“on ”(允许压缩,这会导致文本数据被压缩)“force ”(强制在所有的情况下压缩)压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx去做
disableUploadTimeout: 允许servlet容器在数据上传时使用不同的连接超时,通常较长。如果没有指定,该属性被设置为true,禁用上传超时
enableLookups:关闭DNS反向查询,DNS反查很耗时间
在服务状态页面中可以看到,默认状态下会启用AJP服务,并且占用8009端口。
vim /usr/local/tomcat/conf/server.xml
修改:
改为:
ystemctl restart tomcat
测试:
AJP没了,或者netstat查看8009端口监听
SHUTDOWN端口是写在server参数里面的,一般在安全设置时候建议把端口修改为其他端口
实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1就可以
JVM优化主要是对堆内存的优化
JVM内存模型
分为三大部分
1.堆内存
2.方法区
3.栈内存
注:Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程,主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文存放在栈内存,线程终止就会释放
Java中堆是由所有的线程共享的一块内存区域
堆内存是所有 虚拟机所管理的内存中最大的一块,所有线程共享的一块内存区域,在虚拟机启动时创建
分为两个部分:年轻代和老年代
年轻代
Young,年轻代,对象在被创建时,内存首先是在年轻代进行分配,但创建时内存较大会分配到老年代,当年轻代需要回收时会触发Minor GC(也称垃圾收集,垃圾回收),回收的目的为了释放young内存空间
Young 区被划分为三部分,Eden 区和两个大小相同的 Survivor 区,其中 Survivor 区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用
在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区中,经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured (老年代)区
老年代(Tenured)
老年代用于存放在年轻代中经多次垃圾回收仍然存活的对象,当老年代满了的时候就需要对老年代进行垃圾回收,老年代的垃圾回收称作Major GC(也称作Full GC)
方法区存放了要加载的类的信息(如类名,修饰符)、类中的静态变量、final定义的常量、类中的field、方法信息
1、对于堆区大小,可以通过参数-Xms和-Xmx来控制,-Xms为JVM启动时向系统申请的heap内存,默认为物理内存的1/64,但小于1GB;-Xmx为JVM可申请的最大Heap内存,默认为物理内存的1/4但小于1GB,默认当剩余堆空间小于40%时
2、年轻代可通过-Xmn参数来调整新生代大小,也可通过-XX:SurvivorRatio来调整Eden Space区和两个s区大小
3、老年代所占用的内存大小为-Xmx对应的值减去-Xmn对应的值
JVM按照其存储数据的内容将所需内存分配为堆区与非堆区(方法区)两个部分
配置堆区的(-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn)
配置非堆区(-XX:PermSize、-XX:MaxPermSize)
修改/usr/local/tomcat/bin/catalina.sh文件,添加即可
在110行添加如下内容
export JAVA_OPTS="-server -Xms1024M -Xmx1024M -Xmn512M -Xss512k -XX:PermSize=256M -XX:MaxPermSize=512M -XX:NewRatio=2 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=10 -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=20 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
主要参数说明:
-server:应用于服务器的配置
-Xms:ava虚拟机堆区内存初始内存分配的大小,设置太小会导致tomcat起不来服务
-Xmx:java虚拟机堆区内存可被分配的最大上限,初始和最大值一般设置一样即可,不会频繁的申请内存空间
-Xmn:设置年轻代大小
-XX:newSize:表示年轻代初始内存的大小,应该小于 -Xms的值
-XX:MaxnewSize:表示年轻代可被分配的内存的最大上限
-Xss:是指设定每个线程的栈大小一般看线程占用多少内存
-XX:PermSize:表示方法区初始内存分配大小。
-XX:NewRatio:设置年轻代(包括 Eden 和两个 Survivor 区)与老年代的比值(除去永久代)。设置为 2,则年轻代与终身代所占比值为 1:2,年轻代占整个堆栈的 1/3
-XX:SurvivorRatio=4: 设置堆内存年轻代中Eden区与Survivor区大小的比值 。设置为4,4指的时eden区站年轻代的几份,则两个Survivor区(JVM堆内存年轻代中默认有2个Survivor区)与一个Eden区的比值为2:4,一个Survivor区占 整个年轻代的1/6
-XX:MaxTenuringThreshold:设置垃圾最大年龄,默认为:15。如果设置为0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代
-XX:+UseParNewGC:设置年轻代为并发收集
-XX:+UseConcMarkSweepGC:设置年老代为并发收集
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等