Web服务器群集——部署TOMCAT及优化

部署TOMCAT及优化

部署TOMCT

Tomcat介绍

Tomcat简介

  • Tomcat最初研发时叫Catalina,因此安装路径下有很多和Catalina有关的目录和文件

应用场景

  • 它是免费的轻量级Web应用服务器,在中小型系统和并发访问用户不多的场合下被普遍应用,是开发和调试JSP程序的首选。它通常是作为一个Servlet和JSP容器,单独运行在后端

安装jdk

jdk是 Java 语言的软件开发工具包

jdk是Tomcat运行的必要环境

下载地址:官网下载

# 解压
[root@lnmp ~]# tar xf jdk-8u221-linux-x64.tar.gz  -C /usr/local/

# 改名
[root@lnmp local]# mv jdk1.8.0_221 jdk

[root@lnmp local]# java -version
-bash: java: command not found

# 修改环境变量
[root@lnmp local]# vim /etc/profile
# 在最后一行添加
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

# 使环境变量生效
[root@lnmp local]# source /etc/profile
# 查看jdk版本
[root@lnmp local]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

安装tomcat

[root@lnmp ~]# tar xf apache-tomcat-8.5.16.tar.gz  -C /usr/local/

[root@lnmp local]# mv apache-tomcat-8.5.16 tomcat

# 开启tomcat
[root@lnmp bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@lnmp bin]# netstat -antpl
# netstat -antpl 查询tomcat是否成功开启

打开浏览器
在这里插入图片描述
缩短启动TOMCAT的时间

[root@lnmp security]# cd /usr/local/jdk/jre/lib/security/

[root@lnmp security]# vim java.security 
# 将这条修改
securerandom.source=file:/dev/random

securerandom.source=file:/dev/urandom

Tomcat的配置

目录说明

目录 作用
bin 启动和关闭Tomcat 脚本文件
conf Tomcat服务器各种配置文件
lib Tomcat服务器的 jar 包
logs Tomcat日志
temp Tomcat运行时产生的文件
webapps 项目资源的目录
work Tomcat工作目录

配置文件说明

/usr/local/tomcat/conf

配置文件 作用
server.xml 主配置文件
catalina.policy 权限控制配置文件
catalina.properties Tomcat属性配置文件
context.xml 上下文配置文件
logging.properties 日志相关配置文件
tomcat-users.xml manager-gui管理用户配置文件
web.xml Tomcat的servlet、servlet-mapping、filter、MIME等相关配置

主配置文件(server.xml)的说明

  • Server:整个Catalina的servlet容器
  • Service:由一个或多个connector组成,以及一个engine,负责处理所有connector所获得的客户请求
  • Connector:在某个指定端口侦听客户请求,并将获取的请求交给engine处理,从engine获取回应并返回客户
    • tomcat有两个典型connector,一个侦听来自browser的http请求(8080),一个监听来自其他webserver的请求(8009)
  • Engine:其中可以配置多个虚拟主机(Virtual Host),每个虚拟主机都有一个域名,engine有一个默认虚拟主机,当请求无法匹配到任何一个host时,交给默认host处理
  • host:代表一个虚拟主机。可部署一个或多个web app,每个web app对应一个context来处理,匹配方法是最长匹配,所以一个path=="" 的context将成为该host的默认context
  • context:对应于一个web app,并在里面建立一个webapp目录,用于存放网站文件

虚拟主机配置

有多个项目同时运行时,一台服务器不建议运行多个Tomcat服务,需要配置虚拟主机

通过两个域名访问到不同的项目内容

  1. 创建hs和cy项目目录和文件
[root@lnmp bak]# cp -r cy /usr/local/tomcat/webapps/
[root@lnmp bak]# cp -r hs /usr/local/tomcat/webapps/

[root@lnmp webapps]# ls
cy  docs  examples  host-manager  hs  manager  ROOT
  1. 修改Tomcat主配置文件
[root@lnmp conf]# vim /usr/local/tomcat/conf/server.xml 

# 我们找到Host标签 在里面配置虚拟主机的信息
<Host name="www.hs.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/usr/local/tomcat/webapps/hs"  path="" reloadable="true" />
</Host>

<Host name="www.cy.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/usr/local/tomcat/webapps/cy"  path="" reloadable="true" />
</Host>

# 重启tomcat
[root@lnmp bin]# ./shutdown.sh 
[root@lnmp bin]# ./startup.sh
  1. 测试
    域名后面一定要跟端口号8080
    在这里插入图片描述
    在这里插入图片描述
    补充:

如果没有java的项目 可以自己写一个基础网页

[root@lnmp cy]# vim index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<body>
<% out.println("欢迎来到我的网站");%>
</body>
</html>

在这里插入图片描述
扩展:
报错

[root@lnmp bin]# ./startup.sh 
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

# 原来在Linux使用Tomcat不输工程使用的是新创建的用户非ROOT权限创建的,但可能会碰到一种情况,在这种用户身份下启动工程后,关闭SSH工具,工程便无法访问,于是需要换到root来执行,但会出现以下报错,导致进程无法启动

# 解决方法就是在/root/.bashrc中再配置一次jdk环境变量
[root@lnmp bin]# vim ~/.bashrc 
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

[root@lnmp bin]# ./startup.sh 

Tomcat多域名指向同一服务

<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
    <Alias>www.hs.com</Alias>  
    <Alias>www.cy.com</Alias>
    <Context path="" docBase="/root/tomcat/webapps/hs" reloadable="true" /> 
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                    prefix="localhost_access_log" suffix=".txt"
                    pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

在这里插入图片描述
在这里插入图片描述
多域名指向不同服务
这就是上面部署虚拟主机那种

<Host name="www.hs.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/usr/local/tomcat/webapps/hs"  path="" reloadable="true" />
</Host>

<Host name="www.cy.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/usr/local/tomcat/webapps/cy"  path="" reloadable="true" />
</Host>

Tomcat优化

  • 操作系统优化(内核参数优化)
  • Tomcat 配置文件参数优化
  • Java 虚拟机(JVM)调优

Tomcat主配置文件server.xml 常用的配置参数

参数 作用
maxThreads 可以同时处理的请求的最大数目
minSpareThreads 线程的最小运行数目
maxSpareThreads 线程的最大运行数目
URIEncoding URL编码字符集
connectionTimeout 连接超时时间
enableLookups 关闭DNS反向查询
disableUploadTimeout 这个标志允许servlet Container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。如果没有指定,设为false。
acceptCount 当所有可能的请求处理线程都在使用时传入连接请求的最大队列长度。如果未指定,默认值为100
compression 是否启用gzip压缩,默认为关闭状态
compressionMinSize 如果compression=“on”,则启用此项。被压缩前数据的最小值,也就是超过这个值后才被压缩。如果没有指定,这个属性默认为“2048”单位为byte。
compressableMimeType 指定gzip的类型

如果对代码进行了动静分离处理,静态页面和图片等数据就不需要做Tomcat 处理,也就不需要在Tomcat 中配置压缩

操作系统优化(内核参数优化)

# 调整进程可打开文件最大数
# 临时修改
[root@lnmp conf]# ulimit -n		# 默认是1024
1024
[root@lnmp conf]# ulimit -n 65535	# 改成65535

# 永久修改
[root@lnmp conf]# vim /etc/security/limits.conf
# 添加(100000改成自己需要的数值)
 hard nofile 100000
 soft nofile 100000
 
soft nproc:单个用户可用的最大进程数量(超过会警告)
hard nproc:单个用户可用的最大进程数量(超过会报错)
soft nofile:可打开的文件描述符的最大数(超过会警告)
hard nofile:可打开的文件描述符的最大数(超过会报错)

# 编辑文件/etc/sysctl.conf中的相关内核参数
#  net.core.wmem_default 发送缓存区预留内存默认大小 默认值 16k
#  net.core.rmem_default 接受缓存区预留内存默认大小 默认值 16k
#  net.core.wmem_max 发送缓存区预留内存最大值 默认值 128k
#  net.core.rmem_max 接受缓存区预留内存最大值 默认值 128k
#  
#  net.unix.max_dgram_qlen 进程间通信发送数据, 默认10
#
#  net.ipv4.tcp_syncookies 只有在内核编译选择CONFIG_SYNCOOKIES时发送作用,当出现syn等待队列出现溢出时像对方发送synccookies,防止syn flood攻击
#  net.ipv4.tcp_max_syn_backlogi 送人SYN包的最大请求队列,负载重的服务器增加该值提升接受连接的能力,默认值 1024
#  net.ipv4.tcp_synack_retries 
#  net.ipv4.syn_retries
#  net.ipv4.tcp_fin_timeout 如果socket连接由本端关闭,则保持在FIN-WAIT-2状态的时间
#  net.ipv4.tcp_keepalive_time 当keepalive起作用的时候,tcp发送keepalive消息的频度,默认2小时
#  net.ipv4.tcp_tw_reuse 开启重用 允许将状态为TIME-WAIT的sockets 重新用于新的tcp连接,默认为0(关闭)
#  net.ipv4.tcp_tw_recycle 开启tcp连接中TIME-WAIT状态的socket的快速回收,默认0(关闭) 
#  net.ipv4.ip_local_port_range 用于向外连接的端口范围,默认 32768 61000
#  net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME-WAIT状态的socket连接的最大数量,超过则清除TIME-WAIT状态socket连接,并打印警告信息,默认18000
#  net.ipv4.route_max_size 路由缓存最大值
#

kernel.core_pattern=/data/logs/core_files/core-%e-%p-%t

net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.wmem_max=16777216
net.core.rmem_max=16777216

net.unix.max_dgram_qlen = 100

net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn_backlog = 81920
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_fin_timeout = 3
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 20000 65000
net.ipv4.tcp_max_tw_buckets = 200000
net.ipv4.route.max_size = 5242880

修改完毕之后,调用命令 sysctl -p 使修改立即生效

Tomcat 配置文件参数优化

# 根据自己服务器配置而优化参数
[root@lnmp conf]# vim server.xml 
# 搜索<Executor name="tomcatThreadPool" 可以修改为 最大连接数500,线程的最小运行数目50,线程的最大运行数目100,最大空闲时间为 60000
< Executor  name = "tomcatThreadPool"  namePrefix = "catalina-exec-"
         maxThreads= "500"  minSpareThreads= "20"  maxSpareThreads= "50"  maxIdleTime= "60000" />
         
         
# 修改<Connector …>节点

<Connector executor="tomcatThreadPool"
            port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" 
        	enableLookups="false" 
        	disableUploadTimeout="true"
        	connectionUploadTimeout="150000"
        	acceptCount="300" 
        	keepAliveTimeout= "120000"
        	maxKeepAliveRequests= "1"
        	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" />
  • maxThreads :Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200

  • minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。

  • maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。

上边配置的参数,最大线程 500(一般服务器足以),要根据自己的实际情况合理设置,设置越大会耗费内存和 CPU,因为 CPU 疲于线程上下文切换,没有精力提供请求服务了,最小空闲线程数 20,线程最大空闲时间 60 秒,当然允许的最大线程连接数还受制于操作系统的内核参数设置,设置多大要根据自己的需求与环境。当然线程可以配置在“tomcatThreadPool”中,也可以直接配置在“Connector”中,但不可以重复配置

  • URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 WEB 服务器软件配置方便,需要分别指定。

  • connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。

  • enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。

  • disableUploadTimeout:上传时是否使用超时机制。

  • connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

  • acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。

  • keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时。

  • maxKeepAliveRequests:表示在服务器关闭之前,该连接最大支持的请求数。超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间。

  • processorCache:这个缓存的大小,默认值是200

  • compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。

  • compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。

  • compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。

如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了。

Java 虚拟机(JVM)调优

因为自己还在学习JVM中 目前JVM调优就没法写笔记 等自己把JVM学完再回来补充!

猜你喜欢

转载自blog.csdn.net/Cantevenl/article/details/115212572