涨薪技术|0到1学会性能测试第53课-Tomcat配置
前面的推文我们掌握了Tomcat服务器的3种监控技术知识。今天给大家分享Tomcat调优技术。后续文章都会系统分享干货,带大家从0到1学会性能测试。
01Tomcat配置
当Tomcat服务器安装好并开始运行后,需要对服务器进行一些基本配置,通常关于Tomcat服务器的配置包括两部分:
第一:编辑Tomcat的XML配置文件;
第二:确定适当的环境变量;
1) XML配置文件
关于XML配置文件,Tomcat服务器有两个很重要的XML配置文件需要配置:server.xml和web.xml。通常情况下这两个文件存放Tomcat安装目录下的conf文件夹中。
server.xml文件是Tomcat最主要的配置文件,该文件主要是指定Tomcat启动时的初时配置,并定义Tomcat启动和构建的方式。server.xml文件中包含五类基本类别:顶层元素、连接器、容器、嵌套组件和全局设置。这些类别都有着很多属性,在配置过程中可以对这些值进行微调,通常包括以下几部分的内容:
-
顶层元素(Top Level Elements)
关于顶层元素主要包括服务器和服务两类,服务器主要定义一个单个的Tomcat服务器,主要包括Logger和ContextManager配置,此外还包括服务器支持的“端口”、“关机”和“类名”属性。服务则是一个元素,该元素嵌套在一个服务器中,服务包含一个或多个用于共享相同引擎的组件,该组件主要功能是定义一个单一服务器的组件,服务的名称在“name”属性中指定。
-
连接器(Connectors)
在服务器标签中可以定义一个或多个连接器,通过Catalina从这些端口向引擎组件发送请求,Tomcat允许定义HTTP和AJP两种连接器,关于这两种连接器将在连接器部分的内容中进行详细介绍。
-
容器(Containers)
这些元素使用Catalina直接处理设备的请求。
-
上下文(Context)
此元素是一个单一的web应用,并且包含如果查找到最适合的应用程序资源的路径信息,当Catalina接收到一个请求后,它使用context去匹配最长的URL,直到找到正确的服务请求元素,context元素为每个元素设置一个最大的嵌套实例,虽然可以通过修改server.xml文件来修改context的内容,但一般情况下不应该修改context内容,因为这些配置如果不重启Tomcat服务器不能被加载。
-
主机(Host)
这个元素嵌套在引擎元素中,用于关联Catalina服务器所在网络中的网络服务器名,这个元素的功能只有在虚拟机注册DNS管理域的过程中才能正确使用,该元素最大的作用是嵌套别名,可以为同一个虚拟机定义多个不同的别名。
-
集群(Cluster)
集群元素能够提供上下文属性复制、WAR部署、会话复制并且将其嵌套在一个引擎或主机元素中,虽然可以对这个元素进行配置,但一般情况下缺省设置就可以满足用户的需求。
-
全局命名资源(Global Naming Resources)
这个元素主要是为一个指定服务器指定全局Java名和目录接口资源,可以在该元素中定义和的查找特征并且可以使用进行链接。如果使用该技术定义其它的参数,那么必须指定和配置对象属性。
-
范围(Realm)
这个元素可以被嵌套在任何容器元素中,用于定义数据库用户名、密码和容器的角色,如果嵌套在主机或引擎元素中,那么Realm元素的特征将会继承低级别容器的特性。Realm元素中最生要的属性是“classmate”,其主要提供不同类型容器的安全性,并且实现的方式有多种。
-
资源(Resources)
这个元素主要是用于通过web应用程序引导Catalina的静态资源,常见的静态资源有:类、HTML和JSP文件等。
-
Web.xml文件
Web.xml文件遵从Servlet规范,其主要包含的信息用于部署和配置web应用程序,如果是第一次配置Tomcat,那么主要是定义Servlet映射到主要的部件(如JSP)。在Tomcat中,这个文件以同样的方式在Servlet规范中描述这些功能。
2) 环境变量
在第一次配置Tomcat时,有几个环境需要进行适当的修改,主要包括:JAVA_OPTS、CATALINA_HOME、CATALINA_OPTS。
JAVA_OPTS
使用该变量可以定义JVM中堆的大小,堆大小是一个很重要的指标,当在部署一个新的应用程序时,需要设置一个适当的堆大小的值,否则会影响系统性能,同时可以消除或减小OOME消息。
CATALINA_HOME
该变量用于指定Tomcat的安装位置,当Tomcat脚本启动时会自动去检查这个变量的值,以确定设置是否正确,避免运行过程中出现问题。
CATALINA_OPTS
该变量用于设置Tomcat指定的不同的选项。
除了以上一些配置外,还有两个相关的配置会影响系统性能:DNS查找和JSP编译。
DNS查找
如果web应用服务器需要获得客户端的日志信息,那么通常有两种方式:
一是:记录客户端机器的IP地址;
二是:在DNS中查找客户端主机名信息;
而DNS查询需要网络流量,在查询过程中可能会经历多个服务器的往返查找,但也可能不需要,这样就会导致出现延迟响应的情况,如果需要消除这些延迟响应,就必须关闭DNS查询,在HTTP对象中有一个getRemoteHost的方法,通过这个方法可以找到一个唯一的IP地址,关于DNS的选项设置在server.xml文件中的connector(连接器)中设置,源代码如下:
<!--
Define a non-SSL Coyote HTTP/1.1 Connector on port 8080
-->
<