目录

概念

​编辑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

JSP:全名为Java Server Pages,中文名叫java服务器页面,是一种动态网页开发技术,形成JSP文件,后缀名为(*.jsp)。

jsp是可以跨平台运行,既能在Linux下运行,也能在其他操作系统上运行

servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,当tomcat收到静态资源请求会直接处理,收到动态资源请求将会调用servlet(连接器),主要处理jsp的程序,生成web内容

处理过程:

1.客户端发送请求至服务器端

2.服务器将请求信息发送至servlet

3.servlet 生成响应内容并传给服务器

4.服务器将响应以动态网页返回给客户端

java

JDK:java development kit  (套件)

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.的源文件包)

JRE:java Runtime Enviroment

是指 Java 的运行环境,是指 java 的使用者,运行JAVA编写程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

JVM:java virtual machine

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语言编写的

部署Tomcat使用jsp链接mysql

Tomcat工作模式、端口

模式:B/S 模式   客户端浏览器和服务端

端口:8080

Tomcat部署:

下载tomcat运行环境 jdk

jdk工具下载:https://www.oracle.com/cn/java/technologies/javase/downloads/#java8

Tomcat:

tomcat下载:Apache Tomcat® - Apache Tomcat 8 Software Downloads

MySQL-Connector-Java

MySQL :: MySQL Community Downloads

选择5.1.47版本,因为我们mysql是5.7版本的,选择tar包下载

Tomcat-native:

Tomcat Native 提高tomcat性能包,提高tomcat处理静态页面的性能。这个软件在tomcat的bin目录下已经提供,不用单独去下载了!

安装JDK

卸载openjdk:

安装之前需要查看下系统是否安装了openjdk,如安装了openjdk 先卸载,否则安装不了oracle官方的jdk

yum remove java-* -y

上传所需软件包

解压jdk

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

配置JDK环境变量

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环境变量

java -version

安装tomact

解压软件包

tar -zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/

重命名目录

cd /usr/local/
mv apache-tomcat-8.5.42/ tomcat

注: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脚本

Tomcat启动脚本

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 calledcase "$1" instart)start;;stop)stop;;restart)stopsleep 5start;;*)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文件

启动tomcat

systemctl start tomcat

添加开机自启

systemctl enable tomcat

查看是否启动

ps -ef | grep tomcat

查看端口

三个端口:8080提供web服务的端口,接收连接客户的请求。

8005为管理端口,这个端口监听关闭tomcat的请求,shutdown会向该端口发送的关闭服务器的命令

8009端口为第三方服务程序调用的端口,负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个

测试tomcat

浏览器访问

点击manager APP

拒绝访问,因为这个页面需要我们配置一个账号密码,来访问

注:如果你需要查看 Tomcat 的运行状态可以配置tomcat管理员账户,然后登陆 Tomcat 后台进行查看

创建管理manger APP用户

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: 允许访问文本接口

tomcat以上还需增加以上配置

vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml

<Context privileged="true" antiResourceLocking="false"docBase="${catalina.home}/webapps/manager"><Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" />   #允许任意客户端登入
</Context>

vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml

正则表达式:\d+\  d代表任意一个数字。+代表至少一个或多个

重启tomcat:

systemctl restart tomcat

测试访问:

 查看 当前配置的JVM 大小:

查看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架构与术语

Tomcat结构图

Tomcat主要组件:服务器server,服务service ,连接器Connector、容器Container,连接器和容器是Tomcat核心。

Tomcat 中最顶层是server,代表服务器,一个服务器可包含多个服务。

Service主要包含两个部分:Connector和Container   它们的作用:

Connector用于处理连接,提供Socket与Request(请求)和Response(响应)相关的转化。

Container用于封装和管理Servlet,以及具体处理Request请求。

两大组件:Connector和Container

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 是最底层的组件。

HTTP请求过程

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把响应报文对象返回给客户端

搭建基于域名的web站点

ls /usr/local/tomcat/conf/

server.xml是Tomcat的主配置文件(全局),服务器设置的,例如端口设置,路径设置

修改server.xml配置文件

在末尾</Engine>上面添加

<Host name="www.hjl.com"  appBase="/www/html"><Context path="" docBase="/www/html/web1" /></Host><Host name="www.hjl.cn"  appBase="/www/html"><Context path="" docBase="/www/html/web2" /></Host></Engine></Service>
</Server>

name指定虚拟主机的名称,使用对应的ip将无法访问,如果需要使用 ip 来访问,需要把 host 的name属性改成ip即可

appBase指定应用程序(网站)的根目录,这里可以存放多个程序(网站),一般是相对路径,相对于tomcat的安装目录

Context path=""为虚拟目录,如果是空,表示直接就是/ ,如果是 path=“ aa ”。访问时就是:域名或IP:8080/aa

docBase="……" 为实际目录,可以是绝对路径,如果是相对路径就是基于appBase

<Host>元素其他属性:

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

创建测试web网页

mkdir -p /www/html/{web1,web2}
echo "www.hjl.com" > /www/html/web1/index.html
echo "www.hjl.cn" > /www/html/web2/index.html

修改hosts

vim /etc/hosts

windows修改改hosts

C:\Windows\System32\drivers\etc

192.168.30.66 www.hjl.com
192.168.30.66 www.hjl.cn

重启tomcat

systemctl restart tomcat

网页测试:

安装tomcat-Native

Tomcat 可以使用 apr 来提供更好的伸缩性、性能,优化tomcat 提升性能APR 提升的是静态页面处理能力,基于 ARP(Apache Portable(轻便) Runtime)技术

tomcat-native下载地址

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

重启tomcat

systemctl restart tomcat

查看启动日志是否支持 native

安装mysql

此过程略过

创建测试数据

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

Jsp链接mysql,官方提供了工具: mysql-connector

安装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.*"%>
<html>
<body>
<%
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)%><br><br>
<%}%>
<%out.print("Congratulations!!! JSP connect MYSQL IS OK!!");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

修改mysql的 IP地址等

 注意:代码复制注意核对,由于编码问题,复制到vim中可能会增加多余的%号,记得删除

测试

创建并发布WAR 文件

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文件自动展开为开放式的目录结构

Tomcat优化

隐藏版本信息

隐藏HTTP头部版本信息

编辑server.xml 文件 为connector 添加 server属性

vim /usr/local/tomcat/conf/server.xml

重启tomcat服务

systemctl restart tomcat

验证结果:

隐藏404页面出现的版本号

有时候为了服务器安全很多信息是不能显露出来了,这其中就包含了tomcat服务器的版本号

修改前:

针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar

进入tomcat的lib目录找到catalina.jar文件

解压catalina.jar 包

jar xvf catalina.jar

修改ServerInfo.properties文件

进入org/apache/catalina/util 编辑配置文件ServerInfo.properties

cd org/apache/catalina/util

vim ServerInfo.properties

server.info=APP Srv/1.0
server.number=1.0

将修改后的信息压缩会jar包

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 中的三种运行模式之运行模式的优化

Tomcat支持三种接收请求的处理方式:BIO、NIO、APR

BIO(Blocking IO,阻塞式):

阻塞模式,tomcat7v版本以下使用此模式,每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景

NIO (Non-blocking IO,非阻塞IO):

非阻塞模式,是一个基于缓冲区、并能提供非阻塞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"

重启tomcat

systemctl restart tomcat

查看:

 或者在启动Tomcat后,在/usr/local/tomcat/logs/catalina.out日志中查看

APR:Apache Portable Runtime

APR(Apache Portable Runtime/Apache可移植运行时),Tomcat apr也是在Tomcat上运行高并发应用的首选模式

从操作系统级别来解决异步的IO问题,大幅度的提高性能。必须要安装apr和native,直接启动就支持apr

实际就是之前安装native

在conf/server.xml中修改8080端口对应Connector

 <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"redirectPort="8443" server="APP Srv1.0"/>

重启tomcat,查看启动日志:

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)优化

Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息,默认情况下Tomcat支持200线程访问,超过这个数量的连接将被等待甚至超时放弃我们需要提高这方面的处理能力

打开tomcat安装目录\conf\server.xml文件,找到Connector的配置部分

port 代表服务接口;protocol代表协议类型

connectionTimeout 代表连接超时时间,单位为毫秒

redirectPort 代表安全通信(https)转发端口,一般配置成443

 <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"redirectPort="8443" server="APP Srv1.0" maxThreads="1000"minSpareThreads="100"acceptCount="1000"maxConnections="1000"maxHttpHeaderSize="8192"tcpNoDelay="true"compression="on"disableUploadTimeout="true"enableLookups="false"URIEncoding="UTF-8"/>

参数说明:

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连接器

在服务状态页面中可以看到,默认状态下会启用AJP服务,并且占用8009端口。

修改conf下的server.xml文件,将AJP服务禁用掉。

vim /usr/local/tomcat/conf/server.xml

修改:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改为:

<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

重启tomcat

ystemctl restart tomcat

测试:

AJP没了,或者netstat查看8009端口监听

禁用8005端口

SHUTDOWN端口是写在server参数里面的,一般在安全设置时候建议把端口修改为其他端口

实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1就可以

<Server port="-1" shutdown="SHUTDOWN">

Tomcat中JVM参数优化

JVM优化主要是对堆内存的优化

JVM内存模型

分为三大部分

1.堆内存

2.方法区

3.栈内存

注:Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程,主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文存放在栈内存,线程终止就会释放

Java中堆是由所有的线程共享的一块内存区域

堆内存(heap)

堆内存是所有 虚拟机所管理的内存中最大的一块,所有线程共享的一块内存区域,在虚拟机启动时创建

分为两个部分:年轻代和老年代

年轻代

Young,年轻代,对象在被创建时,内存首先是在年轻代进行分配,但创建时内存较大会分配到老年代,当年轻代需要回收时会触发Minor GC(也称垃圾收集,垃圾回收),回收的目的为了释放young内存空间

Young 区被划分为三部分,Eden 区和两个大小相同的 Survivor 区,其中 Survivor 区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用

在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区中,经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured (老年代)区

老年代(Tenured)

老年代用于存放在年轻代中经多次垃圾回收仍然存活的对象,当老年代满了的时候就需要对老年代进行垃圾回收,老年代的垃圾回收称作Major GC(也称作Full GC)

方法区

方法区存放了要加载的类的信息(如类名,修饰符)、类中的静态变量、final定义的常量、类中的field、方法信息

JVM参数优化

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:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等

Tomcat安装及优化相关推荐

  1. Linux下tomcat安装及优化

    Tomcat官网:http://tomcat.apache.org/ Tomcat 是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,S ...

  2. tomcat安装apr优化

    2019独角兽企业重金招聘Python工程师标准>>> #环境:centos7 + jdk1.8 + tomcat8 #安装前置依赖 yum install -y apr-devel ...

  3. apache tomcat下32还是64_linux平台下Tomcat的安装与优化

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...

  4. linux安装tomcat_【零基础学云计算】详述Linux系统中Tomcat部署及优化

    Tomcat介绍 免费的.开放源代码的Web应用服务器 Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目 由Apache.Sun和一些公 ...

  5. linux平台下Tomcat的安装与优化

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...

  6. Tomcat安装、配置、优化及负载均衡详解

    博客园 首页 新随笔 联系 管理 订阅 随笔- 31  文章- 0  评论- 25  Tomcat安装.配置.优化及负载均衡详解 一.常见JavaWeb服务器      1.WebLogic:是BEA ...

  7. Tomcat 使用apr优化

    转载自   Tomcat 使用apr优化 最近业务服务器出现了一些问题,Nginx傲娇了,准备把加Nginx插件上的一些处理逻辑扔到后端的Tomcat的业务处理里面去,考虑到tomcat目前本来就压力 ...

  8. 干货收藏!史上最强 Tomcat 8 性能优化来啦!| 原力计划

    作者 | ThinkWon 责编 | Elle 出品 | CSDN 博客 授人以鱼不如授人以渔 本博客的目的不在于给出最佳配置,而是带领开发者,能够从实际情况出发,通过不断的调节tomcat和jvm参 ...

  9. Tomcat部署及优化

    Tomcat部署及优化 [前言] 一.Tomcat概述 1.1 Tomcat介绍 1.2 Tomcat三个核心组件 1.3 Tomcat两个功能组件 Container容器 1.4 Java Serv ...

最新文章

  1. 拉取远程分支_git使用教程之创建本地库并关联远程库(笔记整理篇一)
  2. mysql约束日期_MySQL的约束、事务、字符串、日期、数学相关及其他补充
  3. java.lang.OutOfMemoryError处理错误
  4. Java泛型详解,通俗易懂只需5分钟
  5. python sqlalchemy mysql 自动映射
  6. python下绘制折线图
  7. wordpress自定义404页面
  8. otool 分析Mach-O
  9. 谈谈EOS的出块时间,不可逆时间,BFT
  10. 第6章 分支语句和逻辑运算符
  11. 一个奇鸽船新版本 v1.32
  12. R语言构建logistic回归模型并使用偏差(Deviance)和伪R方(pseudo R-squared )评估概率模型:使用sigr包快速计算偏差和伪R方、AIC赤信息指标和偏差的关系
  13. 职场四种人:打工者、职业人、企业人和社会人,你是那种人?
  14. b树与b 树的区别 mysql,B树和B+树
  15. xin片设计的中的数学问题
  16. Hash函数经典用法
  17. oracle11g远程命令执行漏洞,「漏洞通告」WebLogic多个远程代码执行漏洞
  18. 纯CSS实现回到顶部的功能
  19. python邮件管理
  20. MySQL高级篇——日志

热门文章

  1. LayoutParams基本使用
  2. 将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
  3. Django 中间件 Middleware
  4. Kotlin中的inline作用
  5. TYPE-B型PON保护的实现方案
  6. 递归巧解汉诺塔问题(hanoi)
  7. Hanoi汉诺塔代码原理
  8. LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)
  9. 为什么乔布斯最欣赏扎克伯格?
  10. 推荐一些理工科书籍(更新:2020-11-18)