Tomcat性能调优及解析配置


Tomcat 解析 目录 Tomcat 解析 .................................................................................................................. 1 1 文件构成.......................................................................................................... 2 1.1 server/shared/common 目录 ............................................................... 2 1.2 admin 应用和 manager 应用 ............................................................... 2 1.3 conf 目录 ............................................................................................... 3 1.4 work 文件夹 .......................................................................................... 6 1.5 temp 文件夹 ......................................................................................... 6 1.6 logs 文件夹............................................................................................ 6 1.7 bin 文件夹 ............................................................................................. 6 2. Tomcat5 和 Tomcat6 对比 ............................................................................. 6 2.1 Tomcat5.0 与 Tomcat6.0 目录对比 ..................................................... 6 3. Tomcat 性能优化 ............................................................................................ 7 3.1 JVM 内存设置 ....................................................................................... 7 3.2 开启线程池并调整线程数 ................................................................... 9 3.3 禁用 DNS 查询 .................................................................................... 10 1 文件构成 1.1 server/shared/common 目录 Java 类库的存放位置,有三个:分别是/server/lib、/shared/lib 和/common/lib。 区别:/server/lib 下的 Jar 文件只能被 Tomcat 服务器自身访问;/shared/lib 下的 jar 文件及类只能被部署在 Tomcat 中的所有 Web 应用访问,不能被 Tomcat 服务 器本身访问;/common/lib下的Jar文件及类既能被部署在Tomcat中的所有 Web 应用访问,也能被 Tomcat 服务器本身访问。 此外某个 Web 应用下的 Web-inf/lib 下的 Jar 文件只能被该 Web 应用访问。 1.2 admin 应用和 manager 应用 这 是 Tomcat 中自带的两个 Web 应用,位于 <%CATALINA_HOME%>/server/webapps/admin (manager),访问地址是 http://localhsot:8080/admin(manager);服务启动后默认可以访问。 1.3 conf 目录 Tomcat 常用的配置目录,常修改的配置文件有两个 Server.xml 和 Web.xml server.xml。该文件配置整个 Tomcat 服务器,其包含的各个域说明如下: 1.3.1. Server.xml 文件  元素 每个 Service 元素只能有一个 Engine 元素.元素处理在同一个中所有 元素接收到的客户请求.由 org.apahce.catalina.Engine 接口定义. 1) defaultHost 指定处理客户的默认主机名,在中的子元素中必须 定义这一主机。 2) name 定义 Engine 的名字。 在可以包含如下元素, , , 元素 由 Host 接口定义.一个 Engine 元素可以包含多个元素.每个的元素定 义了一个虚拟主机.它包含了一个或多个 Web 应用. 1) appBase 指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于 的相对目录.如果没有此项,默认为 /webapps 2) autoDeploy 如果此项设为 true,表示 Tomcat 服务处于运行状态时,能够监测 appBase 下的文件,如果有新有 web 应用加入进来,会自运发布这个 WEB 应用 3) unpackWARs 如果此项设置为 true,表示把 WEB 应用的 WAR 文件先展开为开 放目录结构后再运行.如果设为 false 将直接运行为 WAR 文件 4) alias 指定主机别名,可以指定多个别名 5) deployOnStartup 如果此项设为 true,表示 Tomcat 服务器启动时会自动发布 appBase 目录下所有的 Web 应用.如果 Web 应用中的 server.xml 没有相应的 元素,将采用 Tomcat 默认的 Context 6) name 定义虚拟主机的名字 在元素中可以包含如下子元素, , , 元素 由 Context 接口定义.是使用最频繁的元素.每个可以包含多个 元素.每个 web 应用 有唯一的一个相对应的 Context 代表 web 应用自身.servlet 容器为第一个 web 应 用创建 一个 ServletContext 对象. 1) path 指定访问 Web 应用的 URL 入口,注意/myweb,而不是 myweb 了事 2) reloadable 如果这个属性设为 true, Tomcat 服务器在运行状态下会监视在 WEB-INF/classes 和 Web-INF/lib 目录 CLASS 文件的改运.如果监视到有 class 文 件被更新,服务器自重新加载 Web 应用 3) cookies 指定是否通过 Cookies 来支持 Session,默认值为 true 4) useNaming 指定是否支持 JNDI,默认值为了 true 如想将程序路径设置为默认路径,类似如下修改: 元素中可包含如下, , ,  Connector 元素 由 Connector 接口定义.元素代表与客户程序实际交互的给件,它负责 接收客户请求,以及向客户返回响应结果. 第一个 Connector 元素定义了一个 HTTP Connector,通过 8080 端口接收 HTTP 请求; 第二个 Connector 元素定义了一个 JD Connector,它通过 8009 端口接收由其它服 务器转发过来的请求. Connector 元素共用属性: 1) enableLookups 如果设为 true,表示支持域名解析,可以把 IP 地址解析为主机 名.WEB 应用中调用 request.getRemoteHost 方法返回客户机主机名.默认值为 true,查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用 的服务器上去获取对应的 IP 的过程,这样会消耗一定的时间,建议关闭。 2) redirectPort 指定转发端口.如果当前端口只支持 non-SSL 请求,在需要安全通信 的场命,将把客户请求转发至 SSL 的 redirectPort 端口 HttpConnector 元素的属 性 2>port 设定 Tcp/IP 端口,默认值为 8080。 3) address 如果服务器有二个以上 ip 地址,此属性可以设定端口监听的 ip 地址. 默认情况下,端口会监听服务器上所有的 ip 地址 4) bufferSize 设定由端口创建的输入流的缓存大小.默认值为 2048byte 5) protocol 设定 Http 协议,默认值为 HTTP/1.1 6) maxThreads 设定在监听端口的线程的最大数目,这个值也决定了服务器可以 同时响应客户请求的最大数目.默认值为 200 7) minSpareThreads 初始化时创建的线程数 8) maxSpareThreads 一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。 9) acceptCount 设定在监听端口队列的最大客户请求数量,默认值为 10.如果队列 已满,客户必须等待. 10) connectionTimeout 定义建立客户连接超时的时间.如果为-1,表示不限制建立 客户连接的时间 JkConnector 的属性 1) port 设定 AJP 端口号 2) protocol 必须设定为 AJP/1.3 1.3.2. Web.xml 文件 该文件是 Web 应用部署描述文件,用于配置其发布信息,主要配置以下内容: 1) Servlet 的定义 2) Servlet 的初始化参数 3) Session 的设定 4) servlet 及 jsp 的映射 5) welcome 文件清单 6) 资源引用(如数据源引用) 7) 环境变量的定义 1.4 work 文件夹 Tomcat 缓存文件夹,把各种由 jsp 生成的 servlet 文件放在这个目录下,里面包 含.java 文件和.class 文件。 1.5 temp 文件夹 Tomcat 运行时候存放临时文件用的 1.6 logs 文件夹 存放 tomcat 日志文件 1.7 bin 文件夹 用于存放启动和关闭 tomcat 的可执行文件。 2. Tomcat5 和 Tomcat6 对比  首先是目录的不同:以前的 common 文件夹变成了 lib 文件夹,也就是放数 据库驱动的文件的地方。  在 conf 文件夹下,多添了一个 context.xml 的文件,这个文件和 server.xml 文件的作用类似,就是配置数据源的文件,在这个两个文件中的哪个文件配 置都可以,也就是这两个文件,是在 tomcat 启动时自动加载的。  在 Tomcat6 里,由于有两个配置文件都能配置数据源,所以可以同时运行 2 个项目,即在 server.xml 中配置一个,还能在 context.xml 配置一个,两个 项目可以同时运行。 2.1 Tomcat5.0 与 Tomcat6.0 目录对比  相同点 bin:存放启动、停止服务器的脚本文件; conf:存放服务器的配置文件,最重要的是 server.xml 文件; logs:存放服务器的日志文件; temp:存放 Tomcat 运行时的临时文件; webapps:web 应用的发布目录; work:Tomcat 的工作目录,默认情况下把编译 JSP 文件生成的 servlet 类文件放于此目录下;  不同点: 1) Tomcat6.0 的 lib 目录存放的是 jar 文件,服务器和所有的 web 应用程序都可以访问。 2) Tomcat5.0 的 common/lib 目录和 Tomcat6.0 的 lib 目录的内容相 同。然而,Tomcat5.0 还对 jar 文件分类了。 3) Tomcat5.0 的 shared/lib 目录放的 jar 文件,所有的 web 应用程 序都可以访问,服务器不能访问; 4) Tomcat5.0 的 server/lib 目录放的 jar 文件,服务器都可以访问, 所有的 web 应用程序不能访问;Tomcat5.0 在 server/webapps 目录中,存放 Tomcat 自带的两个 APP-admin 和 manager 应用, 使用来管理 Tomcat-web 服务用的 3. Tomcat 性能优化 对于使用J2EE 进行开发者而言,在用Tomcat 作为Web 容器时,或多或少都 会遇到系统运行缓慢、Tomcat 内存溢出等问题。为了避免生产模式中出现的这 些问题,查询出一些对Tomcat 优化技术,现介绍如下 3.1 JVM 内存设置 在生产环境中,由于Tomcat 内存大小设置的不合理,会经常造成内存的溢出, 内存溢出有3 种情况:堆溢出(Java heap space)、永久保存区域溢出(PermGen space)和无法创建新的线程(unable to create new native thread)。 1) 堆溢出。在JVM 中,如果98%的时间是用于GC 且可用的Heap size 不足2% 的时候,将抛出此异常信息。没有内存泄露的情况下,调整-Xms 和-Xmx 参 数可以解决(32位操作系统请设置最大虚拟内存<1.5G,64位操作系统请设置 最大虚拟内存<8G) 2) 永久保存区域溢出。PermGen space是指内存的永久保存区域。这一部分用 于存放Class 和Meta 的信息,Class 在被Load 的时候被放入PermGen space区域,它和存放实例(Instance)的堆(Heap)区域不同,GC不会在 主程序运行期间对PermGen space 进行清理,所以如果你的主程序会加载 很多CLASS 的话,就很可能出现PermGen space 错误。这个问题一般是加 大-XX:PermSize –XX:MaxPermSize 来解决。XX:PermSize 永久保存区域 初始大小-XX:PermMaxSize 永久保存区域初始最大值,比如set JAVA_OPTS=-XX:PermSize=128MB -XX:PermMaxSize=256MB 3) 无法创建新的线程。这种现象比较少见,也比较奇怪,主要是和JVM 与系统 内存的比例有关。这种怪事是因为JVM 已经被系统分配了大量的内存(比如 1.5 GB),并且它至少要占用可用内存的一半。在线程个数很多的情况下, 分配给JVM 的内存越多,该错误发生的可能性就越大。创建线程的最大个数 的估算公式为:(MaxProcessMemory-JVMMemory-ReservedOsMemory)/ (ThreadStackSize)= Number of threads;对于JDK1.5 而言,假设操作系 统加载DLL 占用了120 MB内存,对于一个4 GB 物理内存的系统而言:1.5 GB JVM:( 2 GB-1.5 GB-120 MB)/(1MB)≈ 380 threads;1.0 GB JVM: (2GB -1.0GB-120 MB)/(1MB)≈880 threads。 4) Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件 开头增加如下设置,例如:set JAVA_OPTS=-Xms512m -Xmx512m –xx:PermSize=128M –xx:PermMaxSize=256M Linux环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头 增加如下设置:JAVA_OPTS=’-Xms512m -Xmx512m –xx:PermSize=128M –xx:PermMaxSize=256M’ 5) Tomcat6版本已经没有catalina.bat文件了。这个时候我们需要运 行%TOMCAT_HOME%\bin\tomcat6w.exe文件,修改其中的Initial memory pool和Maximum memory pool的值,分别为512、512。 Xms 与 Xmx常规情况下应该设置成同样大小,否则会影响jvm性能。 3.2 开启线程池并调整线程数 如果在系统并发要求特别高的情况下,开启线程池可以大大提高Tomcat 的 并发性,线程池有两个概念:Worker 线程和辅助线程。Worker 线程是工作 线程,主要是运行执行代码,有两种状态:空闲状态和运行状态。在空闲状 态时,类似“休眠”,等待任务;处理运行状态时,表示正在运行任务 (Runnable)。辅助线程主要负责监控线程池的状态:空闲线程是否超过 最大空闲线程数或者小于最小空闲线程数等。如果不满足要求,就进行调整。 第一步,打开共享的线程池: <Executor name=”tomcatThreadPool”namePrefix=”catalina exec-”maxThreads =“ 1000”minSpareThreads =“ 50”maxIdleTime = “600000” acceptCount =“100” maxSpareThreads =“100” enableLookups=“false”/> maxThreads,允许的最大线程池里的线程数量默认是200,大的并发应该设 置的高一些,反正只是限制而已,不占用资源,在程序运行的任何时候,线 程数总数都不会超过这个数,如果请求数量超过最大数时,则会等待其他线 程结束后再处理。 minSpareThreads,最小共享线程数,即最小空闲线程数。如果当前的空闲 数小于该值,则一次性创建这个数量的空闲线程,所以它本身也是一个创建 线程的步长。 maxSpareThreads,最大共享线程数,即最大空闲线程数。如果当前的空闲 线程数超过该值,则多余的线程会被杀掉。 maxIdleTime,超过最小活跃线程数量的线程如果空闲时间超过这个设置后, 会被关别,默认是1min。 acceptCount, 允许的最大连接数应大于等于 maxSpareThreads允许的最大连接数还受制于操作系统的内核参数设置,通 常Windows 是2 000 个左右。 第二步,在Connector 里指定使用共享线程池: <Connector port =“8009”protocol=“AJP/1.3”maxThreads= “5000”executor=“tomcatThreadPool”> 注意,一旦使用了线程池, CONNECTOR 里的属性maxThreads 将被忽略。 3.3 禁用 DNS 查询 当Web 应用程序想要记录客户端的信息时,它也会记录客户端的IP 地址或 者通过域名服务器查找机器名转换为IP 地址。DNS 查询需要占用网络,并 且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP 的过程,这样会消耗一定的时间。为了消除DNS 查询对性能的影响我们可以 关闭DNS查询,修改server.xml 文件中EnableLookups 参数值为false
还剩9页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

987001294

贡献于2015-06-11

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf