当前位置: 首页 > 科技观察

看看Tomcat的安装、配置、优化和负载均衡

时间:2023-03-19 10:05:40 科技观察

一、常见的JavaWeb服务器1、WebLogic:是BEA的产品,WebSphereAS:IBM的产品,JBossAS:RedHat的产品,大家可以学习2.Tomcat服务器:基于Sun公司推出的小型Servlet/JSP调试工具开发的一款优秀的Servlet容器。tomcat本身完全是用java语言编写的,所以tomcat的运行需要java的支持,所以必须先安装JDK才能运行。目前是Apache开源软件组织的一个软件项目。其官网:http://tomcat.apache.orgTomcat得到了广大开源代码志愿者的大力支持,可以兼容目前大部分主流的web服务器(IIS、Apache服务器)协同工作,运行稳定、可靠、高效。它已成为开发企业JavaWeb应用程序的最佳Servlet容器选择之一。二、Tomcat的目录结构和常用配置1、Tomcat的目录层次bin:存放Tomcat启动和关闭的脚本文件conf:存放Tomcat服务器的各种配置文件lib:存放tomcat服务器支持的jar包logs:存放Tomcat的Log文件temp:存放Tomcat运行时产生的临时文件--------------------Web应用所在目录|----html,jsp,css,js等文件,根目录下的文件可以被外界直接访问|----WEB-INF目录|--------classes目录(java类)|--------lib目录(java类运行需要的jar包)|----------web.xml(web应用配置文件)WEB-INF目录下的文件,外界不能直接访问,由web服务器负责调用3.JavaWeb应用发布打开目录方式:打包war方法:使用Jar-cvf*.war.4。Tomcat的结构Tomcat本身由一系列可配置的组件组成,其中最核心的组件就是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。每个组件都可以在Tomcat安装目录/conf/server.xml文件中进行配置,每个Tomcat组件对应server.xml文件中的一个配置元素。下面以XML的形式展示了Tomcat各个组件之间的关系。代表整个Servlet容器组件,是最顶层的元素。它可以包含一个或多个元素。包含一个元素和一个或多个元素,这些共享一个代表实际与客户端程序交互的组件,负责接收客户端请求并返回对客户的回应。每个元素只能包含一个元素,处理同一个中所有收到的客户请求,一个可以包含多个,代表一个虚拟主机(即一个服务器程序可以部署在多个不同IP的服务器主机上),它可以包含一个或多个被最频繁使用的元素,代表一个运行在虚拟主机上的单个Web应用程序5、Tomcat架构6、虚拟目录映射方式Tomcat从Tomcat6开始支持自动映射,即tomcat服务器会自动管理webapps目录下的所有web应用并将其映射到Virtualdirectory,换句话说就是把web应用放在webapps目录下,不需要配置Context,外界可以直接访问。但是如果不想把项目放在webapps下,而是放在其他地方,还是需要配置Context。比如我的tomcat在C盘,我的项目在D盘。需要在Host下添加如下虚拟目录映射语句。7.上下文元素配置当tomcat加载一个web应用时,会一次通过以下五种方式在web应用中搜索元素,找到后降低优先级。在Tomcat安装目录/conf/Context.xml文件中搜索元素。在Tomcat安装目录/conf/[enginename]/[hostname]/context.xml.default文件中查找元素。[enginename]:表示name属性[hostname]:表示d,则该属性在Tomcat安装目录/conf/[enginename]/[hostname]/[contextpath].xml文件中查找元素[contextpath]:表示单个在Web应用程序的META-INF/context.xml文件中查找元素的Web应用程序URL条目在Tomcat安装目录/conf/server.xml文件中查找元素。只适用于单个web应用8.将项目部署为tomcat的默认应用,即访问http://localhost:8080时,会看到tomcat自带的欢迎页面,登录自己的项目主页反而。方法一:默认安装Tomcat后,tomcat的主目录是webapps/root目录,所以如果想改变tomcat的主目录,可以这样做:在/conf之间添加代码方法二:删除tomcat中ROOT下的所有文件安装目录,替换成你自己的工程文件,这个方法有点暴力。方法三:Tomcat5.0以下版本会在C:/Tomcat/conf/Catalina/localhost目录下自动生成一个ROOT.Xml,5.0以上版本将不再生成该文件。所以你可以创建一个新的ROOT.xml并在其中添加以下代码:9。Context元素的属性path:指定访问Web应用URL入口的路径docBase:指定web应用的文件路径,可以是绝对路径,也可以是相对于appBase属性的相对路径className:指定Java的名称实现了Context组件的类,并且该类必须实现org.apache.catalina.Context接口,该属性默认值为org.apache.catalina.core.StandardContext(不建议更改)reloadable:如果是是的话,Tomcat服务器会监听运行状态下的WEB-INF/classes和WEB-INF/lib目录下的Class文件的变化,以及监听web应用的WEB-INF/web.xml文件的变化。如果检测到更新,服务器将自动更新并加载Web应用程序。它的默认值为假。在开发调试阶段,将其改为true。一般Eclipse等开发环境默认会改成true。在正式发布阶段,应该设置为false,这样可以减少Tomcat的运行负载,提高Tomcat的运行性能。一般来说,元素会使用默认的标准Context组件,即className属性采用org.apache.catalina的默认值。core.StandardContext,除了上面介绍的属性外,它还有自己专有的属性:cachingAllowed:是否允许缓存静态资源(HTML、图片、声音等)。默认值是true。cacheMaxSize:设置静态资源缓存的最大值,单位为K。workDir:指定web应用的工作目录。uppackWAR:如果为真,war文件将被展开到一个打开的目录中,然后运行。如果为false,则直接运行war文件。默认值是true。10、web.xml文件必须放在/WEB-INF目录下,但是从7.0版本开始,Tomcat可以使用注解代替web.xml文件。三、Tomcat的优化1、内存使用配置Tomcat依赖于JVM,所以Tomcat使用的内存配置本质上就是JVM的内存配置。/bin目录下的catalina.bat可以直接通过Tomcat设置JVM内存参数,在windows下打开catalina.bat文件,找到中间的set"JAVA_OPTS=%JAVA_OPT%-server-Xms2048m-Xmx2048m-XX:PermSize=256m-XX:MaxPermSize=512m-Djava.awt.headless=true"通过内存设置充分利用服务器内存-server:mode启动应用较慢,但大大提高运行性能-Xms2048m-Xmx2048m:设置堆内存java8开始PermSize被MetaspaceSize取代,MetaspaceSize共享heap,不会再出现java.lang.OutOfMemoryError:PermGenspace,不需要设置Headless=true:适用于Linux系统,与图形操作相关,比如生成验证码的意思就是当前没有显示的服务器,在应用中获取系统显示的相关参数就会抛出异常。windows系统不需要设置。可以通过jmap-heapprocess_id查看是否设置成功。在xml中配置,在属性中将protocol属性改为“org.apache.coyote.http11.Http11NioProtocol”,NIO模型效率更高添加maxThreads="500"//最大可以处理的用户访问数同时minSpareThreads="100"//最小空闲线程连接数,用于优化线程池maxSpareThreads="200"acceptCount="200"//当所有线程分配完毕后,仍然允许连接,但是用户处于等待状态。//等待线程数+工作线程数=总最大连接数。如果超过这个数量,//新的连接将不会被接受,并且会产生一个http错误。enableLookups="false"//是否允许DNS反向校验,如果为true,request.getRemoteHost会进行DNS查找,反向解析ip对应的域名或主机名。//当没有这个需求时,可以关闭这个功能,一定程度上提高了Tomcat服务器的性能。、负载均衡配置负载均衡是提高应用负载和容错能力的有效手段,可以结合Nginxs和Tomcat来实现。Nginx是一款性能卓越的反向代理服务器。一、实现反向代理原理的负载均衡配置示意图:负载均衡示意图:负载均衡策略:Nginx提供了三种方式:roundrobin、用户IPhash(客户端IP)和指定权重处理策略Session是Tomcat上的内存空间服务器。如果一个用户向多个Tomcat服务器发送多个请求,那么就会出现Session不同步的问题。解决方案1.将用户的请求锁定到某个服务器上在服务器上,简单,但缺乏容错能力。一旦服务器出现故障,Session可能会丢失,(但服务器故障是小概率事件,如果服务器经常挂掉,要么是硬件问题,要么是应用程序问题。)可以使用用户IPhash来实现解决方案2Session复制策略,基于网络的广播策略,一个节点Session发生变化,其他节点同步复制,具有容错性,但当节点多或复制量大时,网络负载大,使网络效率低,甚至被屏蔽①在/conf/server.xml文件中打开Sessionreplication的选项,去掉注释,配置默认值7.0,receiver需要绑定内网(一般server有两个网卡)网卡地址,修改端口>。②在应用中指定应用为分布式部署,在web.xml中添加选项。方案3额外创建一个共享空间用于存储Session,所有服务器共享一个Sessionmemcached缓存共享方案。基本原理StickySession和non-stickySession模式:需要一些工具jar包,官网有目录和下载链接,配置在/conf/context.xml中,全局有效。3、集群环境下应用代码需要注意的问题传递Session需要实体类的序列化支持,实现可序列化接口,设置版本号。获取用户IP地址的方式改为获取真实客户端ip,不再是Nginx代理地址。动静分离结构的预规划。一般在高并发的网站上,js、css、图片等资源文件通常都是由静态服务器处理的。Nginx处理静态文件效率很高,而tomcat处理静态文件是一大弱点。Tomcat只负责动态请求的处理。然后在编码的时候,需要考虑到静态资源最终可能会被取出来,地址会发生变化,所以在开发的时候就应该规划好访问地址,保持最大的灵活性。