tomcat以及集群

Tomcat 快速入门

版本说明javascript

本文使用 Tomcat 版本为 Tomcat 8.5.24。css

Tomcat 8.5 要求 JDK 版本为 1.7 以上。html

简介

Tomcat 是什么

Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了做为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。java

因为 Tomcat 自己也内含了一个 HTTP 服务器,它也能够被视做一个单独的 Web 服务器。可是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP web server 不是捆绑在一块儿的。Tomcat 包含了一个配置管理工具,也能够经过编辑XML格式的配置文件来进行配置。python

Tomcat 重要目录

  • /bin - Tomcat 脚本存放目录(如启动、关闭脚本)。 *.sh 文件用于 Unix 系统; *.bat 文件用于 Windows 系统。
  • /conf - Tomcat 配置文件目录。
  • /logs - Tomcat 默认日志目录。
  • /webapps - webapp 运行的目录。

web 工程发布目录结构

通常 web 项目路径结构linux

|-- webapp                         # 站点根目录 |-- META-INF # META-INF 目录 | `-- MANIFEST.MF # 配置清单文件 |-- WEB-INF # WEB-INF 目录 | |-- classes # class文件目录 | | |-- *.class # 程序须要的 class 文件 | | `-- *.xml # 程序须要的 xml 文件 | |-- lib # 库文件夹 | | `-- *.jar # 程序须要的 jar 包 | `-- web.xml # Web应用程序的部署描述文件 |-- <userdir> # 自定义的目录 |-- <userfiles> # 自定义的资源文件

webapp:工程发布文件夹。其实每一个 war 包均可以视为 webapp 的压缩包。nginx

META-INF:META-INF 目录用于存放工程自身相关的一些信息,元文件信息,一般由开发工具,环境自动生成。web

WEB-INF:Java web应用的安全目录。所谓安全就是客户端没法访问,只有服务端能够访问的目录。apache

/WEB-INF/classes:存放程序所须要的全部 Java class 文件。vim

/WEB-INF/lib:存放程序所须要的全部 jar 文件。

/WEB-INF/web.xml:web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。

 

tomcat安装过程

上传 apache-tomcat-8.0.52.tar.gz  和JDK-1.8.0   

tar -xvf jdk-1.8.0 -C /application/
 ln -s /application/jdk1.7.0_79/ /application/jdk

sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

source /etc/profile
java -version               至此JDK安装完成


tar -xvf apache-tomcat-8.0.52.tar.gz -C /application/
ln -s /application/apache-tomcat-8.0.52 /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat' >> /etc/profile
source /etc/profile
chown -R root.root /application/jdk /application/tomcat/
至此tomcat 安装完成

若是启动
# /application/tomcat/bin/startup.sh  #若是想弄/etc/init.d/写个脚本调用这个就行
关闭程序
# /application/tomcat/bin/shutdown.sh    #############
TOMCAT 日志文件
catalina.out ###若是有问题看这个文件日志

# vim tomcat-users.xml  开启网页的管理功能,可是不安全,生产环境不建议使用,测试可使用

<role rolename="manager-gui"/>           
<role rolename="admin-gui/>
<user username="tomcat" password="tomcat" roles="manager-gui.admin-gui"/>

mv docs/ examples/ host-manager/ manager/ /tmp/  都移走,就不会有安全隐患了

mv ROOT/* /tmp/          

##########tomcat主配置文件 server.xml

war包放在webapps下面就能够被访问了

若是想修改默认路径能够填写如下信息

125 <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

 

 

######tomcat多实例

# cp -a  apache-tomcat-8.0.52 tomcat1    ###cp整个目录

vim /application/tomcat1/conf/server.xml 

22 8005---8011####这是关闭程序的端口

69 8080---8081 ####这是程序的端口号

123 <Host name="localhost" appBase="/data/www/www"
124 unpackWARs="true" autoDeploy="true">

mkdir /data/www/www/ROOT -p                 tomcat多站点统一用的目录

vim index.jsp

<html>
<body>
    <center>Now time is: <%=new java.util.Date()%></center>
</body>
</html>

10.240.17.17:8081 访问

 

###tomcat集群

vim nginx.conf

server {

           listen 80;

   server_name  tomcat.abc.com;

   location / {

   proxy_pass http://tomcatpoll;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $remote_addr;

}

}

 

定义个upstream tomcatpoll{

                                           10.0.0.1:8080    weight=1     max_fails=3 fail_timeout20s;

                                           10.0.0.2:8081    weight=1     max_fails=3 fail_timeout20s;

                                                                                         }

################以上集群就能够了。

 

Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断从新启动,甚至在午夜时分唤醒你。对于操做系统优化来讲,是尽量的增大可以使用的内存容量、提升CPU 的频率,保证文件系统的读写速率等。通过压力测试验证,在并发链接不少的状况下,CPU 的处理能力越强,系统运行速度越快。

 

Tomcat 的优化不像其它软件那样,简简单单的修改几个参数就能够了,它的优化主要有三方面,分为系统优化,Tomcat 自己的优化,Java 虚拟机(JVM)调优。系统优化就不在介绍了,接下来就详细的介绍一下 Tomcat 自己与 JVM 优化,以 Tomcat 7 为例。

Tomcat 自己优化

Tomcat 的自身参数的优化,这块很像 ApacheHttp Server。修改一下 xml 配置文件中的参数,调整最大链接数,超时等。此外,咱们安装 Tomcat 是,优化就已经开始了。

一、工做方式选择

为了提高性能,首先就要对代码进行动静分离,让 Tomcat 只负责 jsp 文件的解析工做。如采用 Apache 和 Tomcat 的整合方式,他们之间的链接方案有三种选择,JK、http_proxy 和 ajp_proxy。相对于 JK 的链接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像JK 这样久经考验,因此建议采用 JK 的链接方式。 

二、Connector 链接器的配置

以前文件介绍过的 Tomcat 链接器的三种方式: bio、nio 和 apr,三种方式性能差异很大,apr 的性能最优, bio 的性能最差。而 Tomcat 7 使用的 Connector  默认就启用的 Apr 协议,但须要系统安装 Apr 库,不然就会使用 bio 方式。

三、配置文件优化

配置文件优化其实就是对 server.xml 优化,能够提大大提升 Tomcat 的处理请求的能力,下面咱们来看 Tomcat 容器内的优化。

默认配置下,Tomcat 会为每一个链接器建立一个绑定的线程池(最大线程数 200),服务启动时,默认建立了 5 个空闲线程随时等待用户请求。

首先,打开 ${TOMCAT_HOME}/conf/server.xml,搜索【<Executor name="tomcatThreadPool"】,开启并调整为

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>

注意, Tomcat 7 在开启线程池前,必定要安装好 Apr 库,并能够启用,不然会有错误报出,shutdown.sh 脚本没法关闭进程。

而后,修改<Connector …>节点,增长 executor 属性,搜索【port="8080"】,调整为

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               URIEncoding="UTF-8"
               connectionTimeout="30000"
               enableLookups="false"
               disableUploadTimeout="false"
               connectionUploadTimeout="150000"
               acceptCount="300"
               keepAliveTimeout="120000"
               maxKeepAliveRequests="1"
               compression="on"
               compressionMinSize="2048"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
               redirectPort="8443" />

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之间。

compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示容许压缩(文本将被压缩)、force:表示全部状况下都进行压缩,默认值为off,压缩数据后能够有效的减小页面的大小,通常能够减少1/3左右,节省带宽。

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

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

noCompressionUserAgents="gozilla, traviata": 对于如下的浏览器,不启用压缩。

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

以上是一些经常使用的配置参数属性,固然还有好多其它的参数设置,还能够继续深刻的优化,HTTP Connector 与 AJP Connector 的参数属性值,能够参考官方文档的详细说明:

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

2、JVM 优化

 Tomcat 启动命令行中的优化参数,就是 JVM 的优化 。Tomcat 首先跑在 JVM 之上的,由于它的启动其实也只是一个 java 命令行,首先咱们须要对这个 JAVA 的启动命令行进行调优。不论是 YGC 仍是 Full GC,GC 过程当中都会对致使程序运行中中断,正确的选择不一样的 GC 策略,调整 JVM、GC 的参数,能够极大的减小因为 GC 工做,而致使的程序运行中断方面的问题,进而适当的提升 Java 程序的工做效率。可是调整 GC 是以个极为复杂的过程,因为各个程序具有不一样的特色,如:web 和 GUI 程序就有很大区别(Web能够适当的停顿,但GUI停顿是客户没法接受的),并且因为跑在各个机器上的配置不一样(主要 cup 个数,内存不一样),因此使用的 GC 种类也会不一样。

一、JVM 参数配置方法

Tomcat 的启动参数位于安装目录 ${JAVA_HOME}/bin目录下,Linux 操做系统就是 catalina.sh 文件。JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量,还能够在 CATALINA_OPTS 变量中设置。关于这 2 个变量,仍是多少有些区别的:

JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。

CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。

为何有两个不一样的变量?它们之间都有什么区别呢?

首先,在启动 Tomcat 时,任何指定变量的传递方式都是相同的,能够传递到执行“start”或“run”命令中,但只有设定在 JAVA_OPTS 变量里的参数被传递到“stop”命令中。对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。

第二个区别是更微妙,其余应用程序也可使用 JAVA_OPTS 变量,但只有在 Tomcat 中使用 CATALINA_OPTS 变量。若是你设置环境变量为只使用 Tomcat,最好你会建议使用 CATALINA_OPTS 变量,而若是你设置环境变量使用其它的 Java 应用程序,例如 JBoss,你应该把你的设置放在JAVA_OPTS 变量中。

二、JVM 参数属性

32 位系统下 JVM 对内存的限制:不能突破 2GB ,那么这时你的 Tomcat 要优化,就要讲究点技巧了,而在 64 位操做系统上不管是系统内存仍是 JVM 都没有受到 2GB 这样的限制。

针对于 JMX 远程监控也是在这里设置,如下为 64 位系统环境下的配置,内存加入的参数以下:(如下内容若是报错,建议放一行,把双引号去掉可解决)

set CATALINA_OPTS="
-server 
-Xms6000M 
-Xmx6000M 
-Xss512k 
-XX:NewSize=2250M 
-XX:MaxNewSize=2250M 
-XX:PermSize=128M
-XX:MaxPermSize=256M  
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+DisableExplicitGC 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:MaxTenuringThreshold=31 
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:LargePageSizeInBytes=128m 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly
-Duser.timezone=Asia/Shanghai 
-Djava.awt.headless=true"
相关文章
相关标签/搜索