BEA WebLogic平台下J2EE调优攻略-2
上一篇 /
下一篇 2011-12-14 18:00:32
/ 个人分类:其他
6bM8d&z
YF`01.3 Web代码调优
C)B.]._&Dn!qE01.3.1 HttpSession的使用
ViHQ;gF,j mN!j0 应用服务器保存很多会话时,容易造成内存不足,所以尽量减少session的使用,放置session
*H_!i6s1o0里的对象不应该是大对象,最好是简单小对象,实现串行化接口。当会话不再需要时,应当及时调用invalidate()方法清除会话。而当某个变量不需要时,及时调用removeAttribute()方法清除变量。请勿将EJB对象放置在session中。51Testing软件测试网Y2{5g(wN n
CJ0v*]2SWHih01.3.2 JSP代码调优51Testing软件测试网:J+Cz%qzd
目前,在JSP页面中引入外部资源的方法主要有两种:include指令,以及include动作。 include指令:例如<%@ include file="copyright.html" %>,该指令在编译时引入指定的资源。在编译之前,带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定,比运行时才确定资源更高效。51Testing软件测试网4c6x[7c#uS
include动作:例如。该动作引入指定页面执行后生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但是,只有当被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算。51Testing软件测试网#Q-YOz2Lr-mQ$J
7M L)_
z#g5Z*\3{`}~.E0 对于那些无需跟踪会话状态的jsp,关闭自动创建的会话可以节省一些资源。使用如下page指令:<%@ page session="false"%>; 尽量不要将JSP页面定义为单线程,应设置为<%@page isThreadSafe=”true”%>; 在JSP页面最好使用输出缓存功能,如:<%@page buffer="32kb"%>; 尽量用wl:cache定制标记来缓存静态或相对静态的内容,缓存jsp:include操作的结果能显著提高应用程序的运行性能。
H`R|k[[ H0}051Testing软件测试网)Q'OzD|;i&`
1.3.3 Servlet代码调优51Testing软件测试网
{
h4u"hu
Servlet代码调优比较简单:在Servlet之间跳转时,forward比sendRedirect更有效;设置HttpServletResponse 缓冲区,如:response.setBufferSize(20000); 在init()方法里缓存静态数据,而在destroy()中释放它;建议在Servlet里使用ServletOutputStream输出图片等对象;避免在Servlet和Jsp中定界事务等。51Testing软件测试网)K7_-fo&y9rx
`
{gT2y0\01.4 JMS代码调优51Testing软件测试网'L`8H$?
i&q}*nc!r
1.4.1 注意必要的事项,避免使用不必要的特征51Testing软件测试网*E@%TTE h
JMS提供了强有力的消息处理机制,但是为了最大限度的提高JMS系统的性能,应避免使用不需要使用的特征,同时也要注意必要的事项。比如:尽量使用接收程序能直接使用的最简单、最小的消息类型;消息选择器要尽可能简单(最好不使用),尽量不要使用复杂的操作符,如like、in或者between等,使用字符串数据类型的速度最慢; 务必为特定的应用程序定义特定的JMS连接工厂,并且禁用默认的JMS连接工厂;不要在javax.*与weblogic.*的名字空间中使用JNDI名称;尽量使用异步消费者,线程不必封锁以等待消息的到达; 使用完JNDI树上的资源后注意关闭。51Testing软件测试网%K)R"R/}u*pj
c|kl2e01.4.2 消息类型的选择
$tv3U{W0 标准JMS提供了五种消息类型,而TextMessage应用最为普遍, 当发送的消息是几种原始数据类型的集合体时,最好使用MapMessage消息类型,而不要使用ObjectMessage,以便减少不同系统间的耦合。此外消息是否使用压缩要慎重考虑,压缩未必能减少消息大小。如果生产者、消费者和目的地并置在同一WebLogic Server内部,通常不使用压缩。WebLogic特有的XMLMessage能为运行于消息主体之上的消息选择器提供内嵌式支持,而且易于数据交换。因此,建议应用程序之间传送消息使用XML消息格式,而应用程序内部间传送消息使用二进制消息格式。
a(klCjU,E051Testing软件测试网%x,k.arfS
1.4.3 确认方式的选择和JMS事务51Testing软件测试网K3O*m2p Rw`c0iL
使用事务性会话时,尽量使用恰当的消息确认方式:如果需求允许,使用NO_ACKKNOWLEDGE; 非持久的订阅者使用DUPS_OK_ACKNOWLEDGE或者MULTICAST_NO_ACKNOWLEDGE。而使用JTA的UserTransaction,确认方式将被忽略。在使用JMS事务时,无效的消息会导致事务的回滚,以致消息重发这样的死循环。此时,可以将无效消息发送到错误消息队列,并提交JMS事务,这将确保消息不会再次传递。51Testing软件测试网
_(Q/j9Z6a!fE
51Testing软件测试网W{C9f:B*Sw(YT5dh
1.5 EJB代码调优
7d9N P2^3|6V bK}01.5.1 有效使用设计模式51Testing软件测试网^0LS!fQ(tHF
GoF 的《设计模式》为我们实现高性能、易扩展的J2EE应用提供理论保障和技术支持。而EJB作为J2EE的核心组件和技术,善用设计模式对系统性能影响很大。Service Locator 和Value Object 已为我们所熟悉,Floyd Marinescu的《EJB Design Patterns》中的Session Fa?ade、Message Fa?ade、EJB Command和Data Transfer Object等设计模式更是为我们提供设计典范:缓存对EJBHome的访问;使用门面模式,不暴露Entity Bean,用Session Bean封装Entity Bean;如果可以异步处理,则用MDB代替Session Bean;封装业务逻辑在轻量级JavaBean中;使用值对象等简单对象传递数据; 不直接使用get/set方法操作Entity Bean。当然过度使用模式或者牵强套用模式也是不提倡的,总的原则就是减少网络流量,改进事务管理。
)m1m1\xv$Pg3l051Testing软件测试网d8D#l,ep'a]E"v1.5.2 使用EJB和WebLogic的特性
J%JpWx9fa8Yp0 使用EJB和WebLogic的新特性往往能提高性能。与EJB2.0特性相关的技巧有:一个Application中使用本地接口,对于Entity Bean肯定使用本地接口,避免远程调用的开销;使用CMP管理关系,而不是BMP,EJB2.0中CMP的性能大大改善,性能和移植性都优于BMP;使用ejbSelect进行内部查询;使用home方法进行外部查询和批处理; 数据库驱动级联删除等。51Testing软件测试网N:G#E%r bN#f
51Testing软件测试网}3Q/pz.t3R%t
与WebLogic特性相关的技巧有:使用自动生成主键,WebLogic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功能,节约了Entity Bean产生主键的时间,同时设key-cache-size不小于100; WebLogic管理事务性能更好,使用容器管理,而不是Bean管理事务; WebLogic提供了为CMP动态查询和批量插入功能,对性能也有很大帮助。
TR5M_'vl4A"^0
-?e\I8v8HS~01.5.3 缓存资源
*BC3h9@&wEB$s [0 对SLSB或者MDB来说,使用setMesssageDrivenContext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放; 对SLSB或者MDB来说,使用setSessionContext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放; 对Entity Bean来说,使用setEntityContext ()方法缓存特定资源,在unSetEntityContext ()方法里释放。51Testing软件测试网{&Pwf~oEH
0C t\E7RM0`[3dz01.5.4 如何选择和使用Entity Bean51Testing软件测试网:B*s,zNtrt
1. 在设计EJB时,要适当考虑EJB的粒度, 细粒度的EJB在事务管理和资源管理的开销太大,尽量创建粗粒度的 EJB , 不要太粗,粗到能满足实际需求就可以;51Testing软件测试网F+]i3^/`1\AC'D9t
51Testing软件测试网b.~} y8a|C$_x-rD
2. Entity Bean不是唯一方式,如果只有一个很小的数据子集被经常改变,建议采用JDO;
~.\B+LA+N051Testing软件测试网 Dr,[
|G;S8R7oL y hL
3. 在操作大数据量的时候,直接采用JDBC比Entity Bean更有效;
KCb:xk0UJM%Jl0
2e4[e-{Px
?0 4. 避免采用返回很大数据组的finder方法,如 FindAll() 方法,因为它的实现代价太大;51Testing软件测试网7R&v+Qs`:W0R
;k&`+{hg7o q0 5. 考虑设置域组field groups,减少没有必要并昂贵的属性加载,如BLOB;51Testing软件测试网;S
f{!Cv`8i'^X[
/_.J }
Hq/h4[3b0 6. 对于EJB1.1或者BMP,可以设置is-modified-method-name属性,根据isModified()的值来判断是否调用ejbStore()等方法,减少没有必要运算;
0z2nU/Wg051Testing软件测试网:`(iYE}'k @
7. 避免连接多个表创建BMP,可以使用视图,存储过程或者O/R Mapping等方式。
B}{${!o051Testing软件测试网!ZPz-G8jtT
@
1.5.5 其他的一些小技巧
;sU
`Bl G8i CL O0 1. 考虑使用 javax.ejb.SessionSynchronization 接口,提供在Rollback之后恢复数据的方法: afterBegin(), beforeCompletion(), afterCompletion();
1md+RQvY0 2. 使用完SFSB之后,调用remove()方法释放实例;
E C&w6pw3q&P0 3. 假如你不需要EJB服务的时候,建议使用普通Java类;
zf/VX$z`5`{R0 4. 避免EJB之间相互调用;51Testing软件测试网AE)d5Jo
I3W.F&j
5. 使用多读模式。51Testing软件测试网J-p Mj a
收藏
举报
TAG: