LoaRunner性能测试系统学习教程:Tomcat配置( 二 )


DNS查找
如果web应用服务器需要获得客户端的日志信息 , 那么通常有两种方式:

  • 是记录客户端机器的IP地址;
  • 是在DNS中查找客户端主机名信息;
而DNS查询需要网络流量 , 在查询过程中可能会经历多个服务器的往返查找 , 但也可能不需要 , 这样就会导致出现延迟响应的情况 , 如果需要消除这些延迟响应 , 就必须关闭DNS查询 , 在HTTP对象中有一个getRemoteHost的方法 , 通过这个方法可以找到一个唯一的IP地址 , 关于DNS的选项设置在server.xml文件中的connector(连接器)中设置 , 源代码如下:

className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"minProcessors="5"maxProcessors="75"
enableLookups="true"redirectPort="8443"
acceptCount="10"debug="0"connectionTimeout="20000"
useURIValidationHack="false"
/>
如果需要关闭DNS查找 , 那么将该选项设置为“false” 。 除非需要指定一个完整的主机名去访问网站 , 否则都需要将该选项设置为“false” , 这样不但可以节约带宽、查找时间和内存 。 当然对于低流量的网站 , 这个设置项可能不会有明显的效果 , 但是不能排除它某天变成了一个高流量的网站 。
JSP编译
在一个JSP页面第一次被访问时 , 它需要转换为Javaservlet源码 , 并且编译在JAVA字节码 , 而当许多不同用户同时访问JSP页面时 , 服务器可能会被处于一种高负载状态 , 所以应该改善网站对JSP页面的处理方法 , 进而优化JSP的性能 。
Tomcat如何处理JSP页面
JSP是Javaservlet代码与HTML标记的组合 , Tomcat处理JSP是使用一个称为Jasper2的引擎 , 该引擎包括各种处理和解析JSP的组件 , 以及JSP的编译器 。 在一个JSP页面第一次被访问时 , Jasper引擎会将源码转换为Javaservlet源码 , 并且使用JAVA编译器将其编译成JAVA字节码 。
审核动态内容
JSP性能改进的第一步是采取分析网站的结构、预期负载和JSP页面需要实现的功能 , 如果创建的网站中混杂着动态和静态 , 当网站可以完成定期更新静态内容时 , 那么应该是动态处理结束后才多地去处理静态内容 , 例如网站的标题 , 这是一个动态的内容 , 但是一天可能才处理一两次 。
现在解决动态审核问题不完全是使用 , 现在有一些开源于JAVA模板来解决这个问题(如Velocity或Freemarker) , 在未来可能会成为一个新的功能 。
JSP预编译技术
当服务器运行JSP页面时服务器会使用最大的性能来编译JSP页面 , 如果缓解这一问题 , 一般会对JSP进行预编译操作 , 而不是等运行时才进行实时的编译 。 通常有以下三种预编译的方法来提高系统的性能 。
第一:使用请求进行预编译
预编译的一次最简单的方法是 , 在发送请求的过程中进行预编译 , 因为在第一次发送请求时 , JSP会自动进行编译 , 这样在第一个真实的用户访问该JSP页面时就不需要再编译了 , 如果只少数JSP页面 , 并且不需要频繁的启动服务器 , 这样可以在服务器启动时 , 使用一个小脚本自动爬行所有的JSP页面 , 这样可以大大的提高性能 。 这个方法在开发过程中很有用 , 因为这种方法可以查找是哪些用户第一时间访问JSP页面 , 并且可以纠正一些错误 。
第二:启动时进行预编译
JAVA中有一个Javaservlet的模块 , 它包括JSP指定的一些功能和语法元素 , 这些语法在Web应用程序启动时会指定JSP进行编译 , 在“WEB-INF/web.xml”文件中可以对JSP进行预编译设置 , 如以下实例:

YourJSP.jsp
/path/to/yourjsp.jsp
1

整数“1”是用来指定编译序顺的 , 所以可以为预编译创建一个层次结构 , 这样可以消除第一个用户访问预编译页面的时间延迟 , 降低web程序重启的所需要的资源 。
第三:在编译过程中进行预编译
在编译过程中进行预编译是指在构建Web应用程序时 , 使用JspC进行预编译JSP代码 , 而不是在Tomcat服务器上进行动态编译 , 在一些情况中下这种技术可以提高4%的系统性能 。
JSP最佳实践
前面介绍了通过修改Tomcat配置文件来提高JSP性能 , 而遵守一些编码规则也可以提高JSP的性能 , 通常有两种方法:高效缓存和对象控制 。
第一:在代码中如何有效提高JSP原始的缓存数据可以有效的提高性能 , 即如何有效的利用缓存中的数据或如何高效使用缓存方法来处理数据 。
第二:目标控制 , 主要包括会话长度/范围、线程池配置和缓存区大小 。