??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
默认情况下,一个servlet实例会产生多个U程来同时响应多个请求?o:p>
如果某个servlet实现SingleThreadMod旗标接口Q那么这个servlet会自动拒绝多\q行h的模式。在q种情况下,weblogic会生一个servlet实例池来满单线E的要求?o:p>
目前Q应该尽量避免用单U程模式的servletQ如果需要在大容量的pȝ中用单U程模式的servletQ那么应该调整如下的参数Q?o:p>
Single Threaded Servlet Pool Size q个参数可在weblogic.xml或者在weblogic控制Cwebapplication菜单---?/SPAN>configuration?/SPAN>---?/SPAN>Descriptor 子页中进行设|?/SPAN>
默认?/SPAN>5?/SPAN>
2?/SPAN>Weblogic生模式下会自动监测servlet?SPAN lang=EN-US>jsp的更Ҏ况,在品模式下Q不需要这些检查,可以通过下面的参数更改:
JSPPage Check Secs?B style="mso-bidi-font-weight: normal">Servlet Reload Check Secs均设?SPAN lang=EN-US>-1q两Ҏweblogic?SPAN lang=EN-US>jsp?SPAN lang=EN-US>servlet的时间间隔。设|ؓ-1Q?SPAN lang=EN-US>weblogic不再检查?SPAN lang=EN-US>
关闭JSPKeep Generated?/SPAN>JSPVerboseQ品模式下也不需要这两个选项?/SPAN>
Enable JSP Line Numbers q个选项是启?/SPAN>jsp行号的选项Q启用行L目的是用来支持调试,有些IDE可以?/SPAN>jsp生成?/SPAN>java源代码中讄断点用于调试。生产模式中也不需要?/SPAN>
注意Q在产品发布模式下,L止对servlet和jsp的变更检查,q样除了能提高效率以外,q可以防止用上传文g的方式对服务器的d。如果需要更改servlet和jspQ可以重新部|应用?o:p>
3?/SPAN>Session?/SPAN>cookie的相关配|?/SPAN>
概念会话cookieQ如果不讄q期旉Q则表示q个cookie的生命期为浏览器会话期间Q只要关闭浏览器H口Q?/SPAN>cookie消׃。这U生命期为浏览器会话期的 cookie被称Z?/SPAN>cookie?/SPAN>
Session Cookie Max Age Secs 是会话cookie的超时时_讄于0表示不限制?/SPAN>
Session Invalidation Interval Secs 查过?/SPAN>session的周?/SPAN>
Session Timeout Secs session的超时时?/SPAN>
4?/SPAN>Jdbcq接池的配置
URL q接池地址
Driver Classname Q?/SPAN>jdbc驱动cd
Properties Q属性,例如user=examples
Password Q密?/SPAN>
Initial Capacity Q初始连接数
Maximum Capacity Q最大连接数
Capacity Increment Q连接池每次增加q接的数?/SPAN>
Statement Cache Type Q?/SPAN>prepared statements~存的策略,LRU法在有新的语句到来Ӟ最不经常被用得语句调整出缓存?/SPAN>FIXED法为先q先出的法
服务器启动,׃l定到相应的端口QƈZ个端口分配一个线E以接受q接hQ一旦服务器接受到连接请求ƈ建立好连接以后,监听U程处理权交给套接字复用器Q套接字复用器进行一定的处理Qƈ会负责选择利用那个执行队列q将h|入其中。当有一个请求进入执行队列,׃有一个空闲的执行县城从该队列里面取走q向调用者返回结果?/SPAN>
(? 执行队列和执行线E的相关配置
执行U程数量有一定的限制Q在服务器启动的时候,已lŞ成了一个含有一定数量执行线E的池,执行U程可能?/SPAN>servletQ?/SPAN>ejb?/SPAN>jdbc{,׃执行U程仅当E序成功l束或者出现异常才能被释放l箋处理其他hQ所以如果执行线E执行的不够快,而请求又多的情况下,׃造成执行队列的阻塞?/SPAN>
相关的配|信息有Q?/SPAN>
server菜单?/SPAN>?/SPAN>configuration?/SPAN>---〉高U配|?/SPAN>---?/SPAN>Config Execute Queues中的配置如下:
1?/SPAN>Queue Length队列长度Q执行队列的长度
2?/SPAN>Queue Length Threshold Percent 一个百分数Q当request的数量达到队列长度的q个比例的时候,weblogic会发?/SPAN>overflow的标志信息?/SPAN>
3?/SPAN>Thread Count 服务器初始创建的执行U程的数?/SPAN>
4?/SPAN>Thread Increase 如果weblogic发出overflow的标志信息,weblogic会尝试增加这个数量的执行U程Q以解决处理矛盾?/SPAN>
5?/SPAN>Threads Maximum最大执行线E数
6?/SPAN>Threads Minimum最执行线E数
7?/SPAN>Thread PriorityU程优先U?/SPAN>
另外server菜单?/SPAN>?/SPAN>configuration?/SPAN>---?/SPAN>tuning子页中还有一些相关的配置Q?/SPAN>
1?SPAN style="FONT: 7pt 'Times New Roman'"> Stuck Thread Max Time 黏联U程旉Q超q这个时间没有返回的执行U程Q系l将认ؓ是黏联线E?/SPAN>
2?SPAN style="FONT: 7pt 'Times New Roman'"> Stuck Thread Timer Interval pȝ查黏联线E的旉间隔
如果weblogic认ؓ某个队列中的所有的U程全部黏联的话Q?/SPAN>weblogic会增加执行U程的数量?/SPAN>
注意Q执行线E的数量一旦增加,目前weblogic不会d他Q如果增加了一些线E以后再ơ出?/SPAN>overflow的警告,weblogic会l增加执行线E的数量Q一直到辑ֈ上限为止?/SPAN>
(? 套接字复用器的相关配|?/SPAN>
Weblogic带有两个版本的套接字复用器,U?/SPAN>java版和本地接口版(jniQ,一般来说在讉K量小的情况下Q?/SPAN>java版比jni版性能要好一些,因ؓjni?/SPAN>API调用会损׃部分性能Q但是访问量大的情况Q一般都?/SPAN>jni版的性能比较好,所以尽量保?/SPAN>weblogic实用本地接口版的套接字复用器?/SPAN>
相关的配|参数有两个Q在server菜单?/SPAN>?/SPAN>configuration?/SPAN>---?/SPAN>tuning子页中的W一个和W二个配|项?/SPAN>
Enable Native IO Q启用本?/SPAN>IOQ勾选这个配|以后,weblogic׃启用本地接口版的套接字复用器
Socket Readers Q如果不选上一个选项Q则q个选项可用Q也是?/SPAN>java版的套接字复用器会被启用Qƈ且,java版的复用器会从执行线E中抽出q个比例的线E用于处?/SPAN>socket的请求?/SPAN>
来自www.51testing.com论坛 原创作者: sunshinelius QLoadRunner版版主) |
Loadrunner无疑是一个强大有力的压力试工具。它的脚本可以录制生成,自动兌Q测试场景可以面向指标,多方监控Q测试结果图表显C,拆分l合。相信有h象过Q拿着一张性能指标标准列表和测试数据相比较Q如同PH试纸一P遇碱则蓝Q遇酸则U,一目了Ӟ之后可以大声地喊道Q我扑ֈ了Y件系l的性能瓉Q?
|
随着q来J2EE软gq泛地应用于各行各业Q系l调优也来引赯Y件开发者和应用服务器提供商的重视。而对于最l客h_在一个高效、稳定地实现他们的业务需求已l是他们的基本要求。所以J2EE调优昑־非常重要Q而BEA WebLogic Server是业界领先的应用服务器,BEA WebLogicq_下的J2EE调优也就ؓ重要,她将为我们提供普遍的J2EE调优Ҏ。最q网l、杂志上的J2EE调优文章层出不穷。本Z自己^时工作中的一些经验积累分享给大家Q抛砖引玉?/FONT>
目录
?a
W一?应用E序调优
1.1.1 通用代码调优
1.1.2 减小没有必要的操?/FONT>
1.1.3 使用合适的cd
1.1.4 量使用pool,buffer和cache
1.2 JDBC代码调优
1.2.1 严格资源使用
1.2.2 实用技?/FONT>
1.2.3 优化SQL语句
1.3 Web代码调优
1.3.1 HttpSession的?/FONT>
1.3.2 JSP代码调优
1.3.3 Servlet代码调优
1.4 JMS代码调优
1.4.1 注意必要的事,避免使用不必要的特征
1.4.2 消息cd的选择
1.4.3 认方式的选择和JMS事务
1.5 EJB代码调优
1.5.1 有效使用设计模式
1.5.2 使用EJB和WebLogic的特?/FONT>
1.5.3 ~存资源
1.5.4 如何选择和用Entity Bean
1.5.5 其他的一些小技?/FONT>
W二?应用服务器调?/FONT>
2.1 JVM调优
2.1.1 垃圾攉和堆大小
2.1.2 jRockit调优
2.2 Server调优
2.2.1 量使用本地I/O?/FONT>
2.2.2 调整默认执行U程?/FONT>
2.2.3 调整q接参数
2.2.4 创徏新的执行队列
2.3 JDBC调优
2.3.1 调整q接池配|?/FONT>
2.4 WEB调优
2.4.1 调整WEB应用描述W?/FONT>
2.5 JMS调优
2.6 EJB调优
2.6.1 调整pool和cache
2.6.2 优化事务隔离U别和事务属?/FONT>
2.6.3 其他一些小技?/FONT>
W三?数据库调?/FONT>
3.1.1 Oracle性能优化
3.1.2 Oracle的其他调?/FONT>
W四?操作pȝ调优
4.1 操作pȝ调整
4.1.1 HP-UX
4.1.2 Solaris
4.1.3 AIX
4.1.4 Linux
4.1.5 Windows
W五?性能监控和性能分析
5.1 性能瓉
5.2 操作pȝ监控
5.3 数据库监?/FONT>
5.4 WebLogic监控
5.4.1 JVM监控
5.4.2 Console监控
5.4.3 实用工具分析
5.5 应用E序分析
ȝ
参考文?/FONT>
关于作?/FONT>
?a (目录)
随着q来J2EE软gq泛地应用于各行各业Q系l调优也来引赯Y件开发者和应用服务器提供商的重视。而对于最l客h_在一个高效、稳定地实现他们的业务需求已l是他们的基本要求。所以J2EE调优昑־非常重要Q而BEA WebLogic Server是业界领先的应用服务器,BEA WebLogicq_下的J2EE调优也就ؓ重要,她将为我们提供普遍的J2EE调优Ҏ。最q网l、杂志上的J2EE调优文章层出不穷。本Z自己^时工作中的一些经验积累分享给大家Q抛砖引玉?BR>
本文从J2EE应用架构Q下图)来分别剖析系l调优,首先我们一般会从应用程序出发,d总码,做到代码U的优化Q然后再调整应用服务?BEA WebLogic8.1)和数据库 (Oracle9i)的参敎ͼ最后当然是调整操作pȝ和网l的性能(包括g升)。诚?在我遇到的很多项目中,都是出现了性能问题后才惛_调优,而且一般都是先q行pȝ参数调整,实在解决不了才会对代码进行检?实际?我们应当代码的调优放在应用设计时来做,试生时修改代码将是一件极其痛苦的事情?/FONT>
WebLogicq_J2EE应用架构
W一?应用E序?/B>?/FONT>(目录)
1.1.1 通用代码调优
1.1.2 减小没有必要的操?/B>
对象的创建是个很昂贵的工?所以我们应当尽量减对象的创徏,在需要的时候声明它,?始化?不要重复初始化一个对?量能做到再使用,而用完后|null有利于垃圾收集。让cd现Cloneable接口,同时采用工厂模式,减类的创?每次都是通过clone()Ҏ来获得对象。另外用接口也能减类的创建。对于成员变量的初始化也应尽量避? 特别是在一个类z另一个类时?BR>
异常抛出Ҏ能不利。抛出异帔R先要创徏一个新的对象。Throwable接口的构造函数调用名? fillInStackTrace()的本圎ͼNativeQ方法,fillInStackTrace()Ҏ查堆栈,攉调用跟踪信息。只要有异常被抛出,VM必调整调用堆栈,因ؓ在处理过E中创徏了一个新的对象?异常只能用于错误处理Q不应该用来控制E序程?BR>
此外, 关闭Debug输出,量用串行化、同步操作和耗时昂贵的服?如Date())?/FONT>
1.1.3 使用合适的cd
当原始类型不能满x们要求时,使用复杂cd。String和StringBuffer的区别自不必说了,是我们用最多的cd,在涉及到字符q算?强烈使用StringBuffer。在做String匚w时用intern()代替equal()?BR>
带有final修饰W的cL不可z? 如果指定一个类为finalQ则该类所有的Ҏ都是final?BR>
Java~译器会LZ内联所有的finalҎ,q将能够使性能q_提高50%。类的属性和方式使用final或者static修饰W也是有好处的?BR>
调用Ҏ时传递的参数以及在调用中创徏的时变量都保存在栈QStackQ中Q速度较快。所以尽量用局部变量?BR>
ArrayList和Vector,HashMap和Hashtable是我们经常用到的c?前者不支持同步,后者支持同?前者性能更好,大多数情况下选择前者?/FONT>
1.1.4 量使用pool,buffer和cache
使用pool、buffer和cache能大大提高系l的性能,q在J2EE的大部分技术中都是适用的?BR>
在WebLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作?buffer是必ȝ,特别是对大文件的操作,不然Ҏ造成内存溢出。字节操作最?所以尽可能采用write(byte[])QBuffered FileOutputStream比Buffered FileWriter要快,因ؓFileWriter需要Unicode到Byte的{换?BR>
而后面讲到的JDBC、JSP、EJB和JMS我们都非常徏议用buffer和cache。ؓHttpServletResponse讄buffersize,使用wl-cache,~存在JNDI树上获取的对象等{?BR>
此外,使用JDK 1.4的非dI/OҎ能也有很大提高?
1.2 JDBC代码调优
1.2.1 严格资源使用
JDBC代码调优最大的原则是使用WebLogic的连接池,而不是自qq数据库。在我接触的很多自己实现q接池的目?大部分遇到死锁和q接泄漏的问题,最后得不得修改代码。而WebLogic提供了功能强大,性能良好的数据库q接池,我们要做的只是封装一个连接管理类Q从JNDI树上获取数据源ƈ~存Q得到连接,q提供一pd关闭数据库资源的Ҏ?BR>
对Q何资源用的原则是用完即养I不管是数据库资源、上下文环境Q还是文件。数据库资源的泄漏极易造成内存泄漏Q乃至系l崩溃。在使用完数据库资源后依ơ关闭ResultSetQStatement和ConnectionQ而在一个数据库q接多次q行数据库操作时要特别注意ResultSet和Statement依次关闭?BR>
try{
//open connection
pstmt =conn.prepareStatement(strSql1);
pstmt.executeUpdate();
pstmt.close();
pstmt =conn.prepareStatement(strSql2);
rs=pstmt.executeQuery();
while (rs.next()){
//process
}
rs.close();
pstmt.close();
}catch(Exception e){
//close rs,psmt,con
}finally{
//close rs,psmt,con
}
1.2.2 实用技?/B>
在JDBC操作中还有一些小的技巧跟大家分nQ由于获取连接时默认自动提交方式Q用connection.setAutoCommit(false)关闭自动提交Q用PreparedStatement,扚w更新,业务复杂或者大数据量操作时使用存储q程Q尽量用RowSetQ此外设|记录集d~存FetchSize和设|记录集d方向FetchDirectionҎ能也有一定的提高?/FONT>
1.2.3 优化SQL语句
SQL语句的优化牵涉到很多数据库的知识Q需要与索引配合Q因此需要DBA对代码中的SQLq行查测试。常见的Qselect *不提倡用,效率极差Q徏议显式获取列Q即使是所有字D也应罗列,而取L时用count(*),为提高cache的命中率Q尽量做到SQL重用。对于大数据量的查询Q可以充分利用Oracle数据库的Ҏ,每次取出m-n行的数据Q实现分|询。另外,提高性能的好选择可能是把所有的字符数据都保存ؓUnicodeQJava以Unicode形式处理所有数据,因此Q数据库驱动E序不必再执行{换过E?/FONT>
1.3 Web代码调优
1.3.1 HttpSession的?/B>
应用服务器保存很多会话时Q容易造成内存不Q所以尽量减session的用,攄session
里的对象不应该是大对象,最好是单小对象Q实C行化接口。当会话不再需要时Q应当及时调用invalidate()Ҏ清除会话。而当某个变量不需要时Q及时调用removeAttribute()Ҏ清除变量。请勿将EJB对象攄在session中?/FONT>
1.3.2 JSP代码调优
目前Q在JSP面中引入外部资源的Ҏ主要有两U:include指oQ以及include动作?include指oQ例?lt;%@ include file="copyright.html" %>Q该指o在编译时引入指定的资源。在~译之前Q带有include指o的页面和指定的资源被合ƈ成一个文件。被引用的外部资源在~译时就定Q比q行时才定资源更高效?BR>include动作Q例?lt;jsp:include page="copyright.jsp" />。该动作引入指定面执行后生成的l果。由于它在运行时完成Q因此对输出l果的控制更加灵zR但是,只有当被引用的内定wJ地改变Ӟ或者在对主面的请求没有出C前,被引用的面无法定Ӟ使用include动作才合?
对于那些无需跟踪会话状态的jspQ关闭自动创建的会话可以节省一些资源。用如下page指oQ?<%@ page session="false"%> ;量不要JSP面定义为单U程Q应讄?lt;%@page isThreadSafe=”true?>;在JSP面最好用输出缓存功能,? <%@page buffer="32kb"%>;量用wl:cache定制标记来缓存静态或相对静态的内容Q缓存jsp:include操作的结果能显著提高应用E序的运行性能?/FONT>
1.3.3 Servlet代码调优
Servlet代码调优比较单:在Servlet之间跌{Ӟforward比sendRedirect更有效;讄HttpServletResponse ~冲区,如:response.setBufferSize(20000);在init()Ҏ里缓存静态数据,而在destroy()中释攑֮Q徏议在Servlet里用ServletOutputStream输出囄{对象;避免在Servlet和Jsp中定界事务等?/FONT>
1.4 JMS代码调优
1.4.1 注意必要的事,避免使用不必要的特征
JMS提供了强有力的消息处理机Ӟ但是Z最大限度的提高JMSpȝ的性能Q应避免使用不需要用的特征Q同时也要注意必要的事项。比如:量使用接收E序能直接用的最单、最的消息cdQ消息选择器要可能简?最好不使用)Q尽量不要用复杂的操作W,如like、in或者between{?使用字符串数据类型的速度最?务必为特定的应用E序定义特定的JMSq接工厂Qƈ且禁用默认的JMSq接工厂Q不要在javax.*与weblogic.*的名字空间中使用JNDI名称Q尽量用异步消费者,U程不必锁以等待消息的到达;使用完JNDI树上的资源后注意关闭?/FONT>
1.4.2 消息cd的选择
标准JMS提供了五U消息类型,而TextMessage应用最为普? 当发送的消息是几U原始数据类型的集合体时Q最好用MapMessage消息cdQ而不要用ObjectMessageQ以便减不同系l间的耦合。此外消息是否用压~要慎重考虑Q压~未必能减少消息大小。如果生产者、消费者和目的地ƈ|在同一WebLogic Server内部Q通常不用压~。WebLogicҎ的XMLMessage能ؓq行于消息主体之上的消息选择器提供内嵌式支持Q而且易于数据交换。因此,应用E序之间传送消息用XML消息格式Q而应用程序内部间传送消息用二q制消息格式?/FONT>
1.4.3 认方式的选择和JMS事务
使用事务性会话时,量使用恰当的消息确认方?如果需求允?使用NO_ACKKNOWLEDGE;非持久的订阅者用DUPS_OK_ACKNOWLEDGE或者MULTICAST_NO_ACKNOWLEDGE。而用JTA的UserTransactionQ确认方式将被忽略。在使用JMS事务Ӟ无效的消息会D事务的回滚,以致消息重发q样的死循环。此Ӟ可以无效消息发送到错误消息队列Qƈ提交JMS事务Q这确保消息不会再ơ传递?/FONT>
1.5 EJB代码调优
1.5.1 有效使用设计模式
GoF 的《设计模式》ؓ我们实现高性能、易扩展的J2EE应用提供理论保障和技术支持。而EJB作ؓJ2EE的核心组件和技术,善用设计模式对系l性能影响很大。Service Locator 和Value Object 已ؓ我们所熟悉QFloyd Marinescu的《EJB Design Patterns》中的Session Fa?ade、Message Fa?ade、EJB Command和Data Transfer Object{设计模式更是ؓ我们提供设计典范Q缓存对EJBHome的访问;使用门面模式Q不暴露Entity BeanQ用Session Bean装Entity BeanQ如果可以异步处理,则用MDB代替Session BeanQ封装业务逻辑在轻量JavaBean中;使用值对象等单对象传递数?不直接用get/setҎ操作Entity Bean。当然过度用模式或者牵强套用模式也是不提倡的Qȝ原则是减少|络量Q改q事务管理?/FONT>
1.5.2 使用EJB和WebLogic的特?/B>
使用EJB和WebLogic的新Ҏ往往能提高性能。与EJB2.0Ҏ相关的技巧有Q一个Application中用本地接口,对于Entity Bean肯定使用本地接口Q避免远E调用的开销Q用CMP理关系Q而不是BMPQEJB2.0中CMP的性能大大改善Q性能和移植性都优于BMPQ用ejbSelectq行内部查询Q用homeҎq行外部查询和批处理; 数据库驱动联删除等?BR>
与WebLogicҎ相关的技巧有:使用自动生成主键,WebLogic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功?节约了Entity Bean产生主键的时?同时设key-cache-size不小?00;WebLogic理事务性能更好,使用容器理,而不是Bean理事务;WebLogic提供了ؓCMP动态查询和扚w插入功能,Ҏ能也有很大帮助?/FONT>
1.5.3 ~存资源
对SLSB或者MDB来说,使用setMesssageDrivenContext()或者ejbCreate()Ҏ~存特定资源,在ejbRemove()Ҏ里释? 对SLSB或者MDB来说,使用setSessionContext()或者ejbCreate()Ҏ~存特定资源,在ejbRemove()Ҏ里释?对Entity Bean来说,使用setEntityContext ()Ҏ~存特定资源,在unSetEntityContext ()Ҏ里释放?BR>
1.5.4 如何选择和用Entity Bean
1. 在设计EJBӞ要适当考虑EJB的粒? l粒度的EJB在事务管理和资源理的开销太大,量创徏_粒度的 EJB , 不要太粗Q粗到能满实际需求就可以;
2. Entity Bean不是唯一方式,如果只有一个很的数据子集被经常改变,采用JDO;
3. 在操作大数据量的时?直接采用JDBC比Entity Bean更有?
4. 避免采用q回很大数据l的finderҎ,?FindAll() ҎQ因为它的实C价太?
5. 考虑讄域组field groups,减少没有必要q昂늚属性加?如BLOB;
6. 对于EJB1.1或者BMP,可以讄is-modified-method-name属?ҎisModified()的值来判断是否调用ejbStore(){方?减少没有必要q算;
7. 避免q接多个表创建BMP,可以使用视图,存储q程或者O/R Mapping{方式?/FONT>
1.5.5 其他的一些小技?/B>
1. 考虑使用 javax.ejb.SessionSynchronization 接口,提供在Rollback之后恢复数据的方? afterBegin(), beforeCompletion(), afterCompletion();
2. 使用完SFSB之后Q调用remove()Ҏ释放实例;
3. 假如你不需要EJB服务的时?使用普通Javac?
4. 避免EJB之间怺调用;
5. 使用多读模式?/FONT>
W二?应用服务器调?/FONT>(目录)
2.1 JVM调优
2.1.1 垃圾攉和堆大小
垃圾攉(GC)是指JVM释放Java堆中不再使用的对象所占用的内存的q程,而Java?Heap)是指Java应用E序对象生存的空间。堆大小军_了GC的频度和旉。堆大,GC频度?速度慢。堆小,GC频度?速度快。所以GC和堆大小是一l矛盾。ؓ了获取理想的Heap堆大?需要?verbosegc参数(Sun jdk: -Xloggc:<file>)以打开详细的GC输出。分析GC的频度和旉,l合应用最大负载所需内存情况,得出堆的大小?BR>通常情况?我们使用可用内存(除操作系l和其他应用E序占用之外的内?70-80%,为避免堆大小调整引v的开销,讄内存堆的最值等于最大值即:-Xms=-Xmx。而ؓ了防止内存溢?在生产环境堆大小臛_?56M(Platform臛_512M),实际环境?12M~1G左右性能最?2G以上是不可取?在调整内存时可能需要调整核心参数进E的允许最大内存数。对于sun和hp的jvm,怹域太?默认4M)也可能造成内存溢出,应增加参-XX:MaxPermSize=128m。徏议设|时域-Xmn的大ؓ-Xmx?/4~1/3, SurvivorRatio??BR>
Z获得更好的性能,在启动文件设|WebLogicZ品模?此时sun和hp jvm JIT引擎?server,默认情况下打开JIT~译模式Ҏ能也有帮助。调整Chunk Size和Chunk Pool Size也可能对pȝ的吞吐量有提高。此外还需关闭昄GC: -XX:+DisableExplicitGC?BR>
当然在Intelq_上用jRockitQ用参?jrockitQ无疑大大提高WebLogic性能?BR>
2.1.2 jRockit调优
jRockit支持四种垃圾攉器:分代复制攉器、单I间q发攉器、分代ƈ发收集器和ƈ行收集器。默认状态下QJRockit使用分代q发攉器。要改变攉器,可?Xgc:<gc-name>,对应四个攉器分其他为gencopy, singlecom, gencon以及parallel。ؓ得到更好的响应性能Q应该用ƈ发垃圑֛收器Q?Xgc:genconQ可使用-Xms?Xmx讄堆栈的初始大和最大?要设|护理域-Xns?Xmx?0%。而如果要得到更好的性能Q应该选用q行垃圾回收?-Xgc: parallelQ由于ƈ行垃圑֛收器不用nurseryQ不必设|?Xns?BR>
如果你的U程大于100或者在linuxq_下,可以试使用瘦线E模式:-Xthinthread,同时关闭Native IO:-Xallocationtype:global?BR>
jRockit q提供了强大的图形化监控工具Jrockit Management Console。欲详细了解JRockit可访问:http://edocs.bea.com/wljrockit/docs81/index.html?/FONT>
2.2 Server调优
WebLogic Server的核心组件由监听U程,套接字复用器和可执行U程的执行队列组成。当服务器由监听U程接收到连接请求后,对它的q接控制权交l等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的h,q将此请求及相关安全信息或事务处理环境一L入适当的执行队列中(一般ؓ默认的执行队??当有一个请求出现在执行队列中时Q就会有一个空闲的执行U程从该队列中取走发来的?/FONT>hQƈq回应答Q然后等待下一ơ请求。因此要提高WebLogic的性能,必M调整核心lg性能出发?BR>
2.2.1 量使用本地I/O?/B>
WebLogic Server有两套套接字复用器:Java版和本地库。采用小型本地库更有?量ȀzEnable Native IO(默认),此时UNIX默认使用CPUs+1个线E?Window下ؓ双倍CPU。如果系l不能加载本地库,会抛出java.lang.UnsatisfiedLinkException,此时只能使用Java套接字复用器,可以调整socket readers 癑ֈ?默认?3%。该参数可以在Console Server Tuning Configuration配置栏里讄?/FONT>
2.2.2 调整默认执行U程?/B>
理想的默认执行线E数是由多方面的因素军_?比如机器CPU性能、ȝ体系架构、I/O、操作系l的q程调度机制、JVM的线E调度机制。WebLogic生环境下默认的U程?5?随着CPU个数的增?WebLogic可以q乎U性地提高U程数。线E数多Q花费在U程切换的时间也p?U程数越?CPU可能无法得到充分利用。ؓ获取一个理想的U程?需要经q反复的试。在试?可以?5*CPUs为基准进行调整。当I闲U程较少,CPU利用率比较低?可以适当增加U程数的大小(每五个递增)。对于PC Server 和Window 2000Q则最好每个CPU于50个线E? 以CPU利用率ؓ90%左右Z。由于目前WebLogic执行U程没有~小U程数的功能,所以应参数Threads Increase讄?,同时不应改变优先U的大小?/FONT>
2.2.3 调整q接参数
WebLogic Server用Accept Backlog参数规定服务器向操作pȝh的队列大,默认gؓ50。当pȝ重蝲负荷?q个值可能过?日志中报Connection Refused,D有效q接h遭到拒绝,此时可以提高Accept Backlog 25%直到q接拒绝错误消失。对于Portalcd的应?默认值往往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSLq接的超时时?如果客户q接被服务器中断或者SSL定w?可以试增加该倹{这些参数可以在Console Server Tuning Configration配置栏里扑ֈ?/FONT>
2.2.4 创徏新的执行队列
创徏新的执行队列有助于解x心业务优先、避免交叉阻塞、死锁和长时间处理的业务{问题。通常会将自己的执行队列和默认的执行队列设|不同的优先U?q里优先U不应设?或?0?定义一个新的执行队列很Ҏ,利用View Excute Queue选项中的Configure a new Excute Queue链接卛_定制新的执行队列。创建新的执行队列后Q用户需要ؓ应用E序的J2EElg配置分配{略Q以便它可以扑ֈ新的队列。D个例子:要将servlet或jsp捆绑C个特定的执行队列Q必L换web.xml文g,wl-dispatch-policy初始化参数设|ؓ自己的执行队列名?BR>
<servlet>
<servlet-name>servletname</servlet-name>
<jsp-file>/directoryname/deployment.jsp</jsp-file>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>NewExecuteQueueName</param-value>
</init-param>
</servlet>
我们可以Z个jsp或者servlet乃至一个WEB应用讄自己的执行队列。同时也可以为EJB讄自己的执行队列。对于执行时间比较长的MDB,使用自己的执行队列?/FONT>
2.3 JDBC调优
2.3.1 调整q接池配|?/FONT>
JDBC Connection Pool的调优受制于WebLogic ServerU程数的讄和数据库q程?游标的大。通常我们在一个线E中使用一个连?所以连接数q不是越多越?为避免两边的资源消耗,讄q接池的最大值等于或者略于U程数。同时ؓ了减新接的开销,最值和最大DZ致?BR>
增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮?WebLogic能够为每一个连接缓存这些对?此值默认ؓ10。在保证数据库游标大够的前提?可以Ҏ需要提高Statement Cache Size。比如当你设|连接数?5,Cache Size?0?数据库可能需要打开25*10=250个游标。不q的?当遇CPreparedStatement Cache有关的应用程序错误时,你需要将Cache Size讄??BR>
管JDBC Connection Pool提供了很多高U参?在开发模式下比较有用,但大部分在生产环境下不需调整。这里徏议最好不要设|测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上?当然如果你的数据库不E_,时断时箋,你就可能需要上q的参数打开?
最后提一下驱动程序类型的选择,以OracleZ,Oracle提供thin驱动和oci驱动,从性能上来?oci驱动Zthin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改q?q一弱势得到I补。而thin驱动的移植性明昑ּ于oci驱动。所以在通常情况下徏议用thin驱动。而最新驱动器׃WebLogic server/bin目录下的cd可能不是最新的,请以Oracle|站为准: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html?/FONT>
2.4 WEB调优
2.4.1 调整WEB应用描述W?/FONT>
WEB应用除代码之外的调优比较?仅仅是对一些WEB应用描述W的调整。首先关闭Session Monitoring Enabled,仅仅在Cluster环境下设|Session复制(优先使用内存复制),在保证应用正常运行的情况?讄较短的Session时旉?同时生环境下无需查Jsp和servletQJSPPage Check Secs和Servlet Reload Check Secs均设?1,关闭JSPKeep Generated 和JSPVerboseҎ能也有帮助。此外,q可以对jspq行预编?有两U方法:Ȁzprecompile选项Q用weblogic.appc事先~译Q徏议采用后者?/FONT>
2.5 JMS调优
1. 增加-Dweblogic.JMSThreadPoolSize=n(臛_?),以提高处理JMS的线E数,在jRockit上增?XXenablefatspin以减加锁冲H?
2. 采用文g存储{略,同步写{略讄为Direct-Write,同时在windowsq_上启用磁盘写入缓?
3. 使用分布式目的地?Ȁz连接工厂Load Balancing Enabled ,Server Affinity Enabled;
4. 为减服务器不必要的JMSh路由,如果多个目的C间存在事?则部|在同一JMS服务器上,量连接工厂部|到JMS服务器所在的WebLogic实例?集群环境下,则最好将q接工厂部v到集中的所有服务器?而集中每个JMS服务器和目的地成员尽量用类似的讄Q?BR> 5. 启用消息分页存储功能,以释攑ֆ?可以为JMS服务器和目的地设|? ȀzMessages Paging Enabled和Bytes Paging Enabled,同时使用限额防止服务器耗尽接收消息的所有可用内存空?
6. 在运行WebLogic Serverq程之外的生产者务必用流控制, q增大Send Timeout;
7. JMS Server Expiration Scan Interval讑־大的|能禁止主动扫描过期消?
8. 使用FIFO或者LIFO方式处理目的地消?
9. MDB的max-beans-in-free-pool不应大于最大MDBU程?默认U程?2+1)?
2.6 EJB调优
2.6.1 调整pool和cache
initial-beans-in-free-pool定义SLSB启动时实例的个数,默认?,可以调大到正常ƈ发数的大?以减初始响应时间。max-beans-in-free-pool为最大个?默认1000对SLSB来说,在频J创建和删除实例的情况下很有帮助,一般不用调?臛_设ؓ默认U程?q大Ҏ造成内存溢出。而对Entity Bean来说,׃是匿名的,所以当频繁使用finder、home和createҎ时可以调大?BR>
对SFSB来说,量max-beans-in-cache参数讄得够的大,以满Bean实例Ҏ大ƈ发用h的要求,可以避免有状态会话Beanq多的钝化行为。而idle-timeout-seconds量讄?如果SFSB不用于存储Web应用会话状态可以设|ؓ0?BR>
对于Entity Bean来说, max-beans-in-cache同样可以首先采用默认?000Q监控实例缓存和钝化的情?再做适当调整?BR>
q行{略concurrency-strategy定义了实体Bean如何理?有四U策? Exclusive、Databse、ReadOnly、Optimistic。效率依ơ提?可靠性依ơ降?量避免使用互斥{略,如果Bean无需更新操作,使用只读{略,更甚的是,如果Bean的内容不会改?可设|read-timeout-seconds?,乐观q行{略旉用事务间~存{略,在entity-cache描述W中cache-between-transactions元素设ؓtrue?/FONT>
2.6.2 优化事务隔离U别和事务属?/B>
对EJBlg来说Q有四种事务隔离水^Q?/FONT>
以上隔离水^依次降低,效率和性能依次提高。因?选用满在业务数据完整性要求前提下水^最低的隔离U别?BR>
对于事务属性的讄也是如此,对于删除、修改和插入操作讄为Required,而对于只L作设|ؓSupports或者NotSupports?/FONT>
2.6.3 其他一些小技?/B>
1. 利用finders-load-bean的默认值trueQ既可以避免“n+1”的查询问题Q又可以提高pȝ的性能;
2. 使用delay-updates-until-end-of-tx参数的默认值trueQ除非应用程序对某些变化有特别的要求;
3. 应用E序在每个业务方法调用后不需要进行存在性检查,check-exists-on-method讑֮为falseQ以提高E序的性能;
4. 同一应用? enable-call-by-reference讄?true;
5. reentrant讄为false,避免事先加蝲子数据?/FONT>
W三?数据库调?/FONT>(目录)
3.1.1 Oracle性能优化
Oracle9i的性能优化除了调整kernal之外是主要对Oracle启动文g的调?卌整SGA的参数。注?不同操作pȝ不同位数的机器最优的参数不是一L,q里主要有windows和unix之分,32位和64位之分?BR>首先需要调大进E数和游标数,一般默认的值对实际应用来说都比较小,比如?q程数可以调?00,游标数可以调?00?BR>
其次,看一个经验公? OS 使用内存+ SGA + session*(sort_area_size + hash_area_size +2M)<0.7RAM,通常认ؓ此时的SGA比较合理。这里sort_area_size?4k, hash_area_size?28k(当排序多的时候需要增大sort_area_size,按调整后的D?,session表示最大ƈ发进E数,假设100个。假?G内存的机?OS占用200M,PGA占用200M左右,那么SGA可以设ؓ400-500MQ如?G内存可以1GlSGAQ?G可以5GlSGA。不q对?2位数据库来说Q通常最多只能?.7G内存?BR>
然后QSGA内参数设|的基本原则是:data buffer 通常可以可能的大,shared_pool_size 要适度Qlog_buffer 通常大到几百K?M差不多。具体的Qdata buffer 1G内存可以讄500MQ?G设ؓ1.2GQ?G可设?G 。shared_pool_size不易q大Q通常应该控制?00M--300M,如果使用了大量的存储q程Q可以根据SGA的值增大到500MQ如果增大后命中率得不到提高Q则增加是无益的。具体的Q?G内存可以讄100MQ?G设ؓ150MQ?G可设?00M。如不用JavaQjava_pool_size 10-20M卛_。large_pool_size如果不设|MTSQ在20M -30M 卛_Q假如设|?MTS,可以考虑?session * (sort_area_size + 2M)?BR>
最后,关于内存的设|可Ҏstatspack信息和v$system_event,v$sysstat,v$sesstat,v$latch {view信息来考虑微调?/FONT>
3.1.2 Oracle的其他调?/B>
ZOracle高效率的q行Q除了上面提到的内存因素之外Q还有就是需要良好的数据库设计:表、视图、烦引和日志的合理规划和建立。I/O的性能也是重要因素Q应量减少交换和分配。此外,是改善查点的效率?/FONT>
W四?操作pȝ调优(目录)
4.1 操作pȝ调整
操作pȝ影响应用E序q行性能的因素主要有Q硬件的配置(CPU、内存、硬盘等),核心参数,TCP/IP参数以及补丁的情늭。这里对操作pȝ的优?除了更新最新的补丁E序以保证应用程序正常运行之?是调整TCP/IP参数,文g描述W?对于个别操作pȝq有其他特别的参数调整。下面将依次介绍不同操作pȝ的情?更多的信息请参考各操作pȝ的文档?/FONT>
4.1.1 HP-UX
对于HP-UX,你首先需要安装Java Patch:
http://www.hp.com/products1/unix/java/patches/index.html,然后需要确认下面文档中的核心参数是否满?可以使用sam命o修改核心参数):http://e-docs.bea.com/platform/suppconfigs/configs81/hpux11_risc/81sp3.html#80105?BR>
调整TCP参数: ndd -set /dev/tcp tcp_conn_req_max 1024, 侦听队列的最大允讔R度调整到1024?有时操作pȝ限制q程使用的最大内存数于你要配置的内存大?则需要调整该倹{?BR>
读者可以从http://docs.hp.com/hpux/onlinedocs/TKP-90203/TKP-90203.html了解更多的HP-UX调整?/FONT>
4.1.2 Solaris
调整TCP的参?{待旉间隔tcp-time-wait-interval讄?0000ms: /usr/sbin/ndd ?set /dev/tcp tcp_time_wait_interval 60000;
其他参数调整如下:
tcp_xmit_hiwat/tcp_recv_hiwat 131072
tcp_conn_req_max_q/tcp_conn_req_max_q0 16384
调整一个进E打开的文件描q符的数?软限制和限制以及散列表的大?修改/etc/system文g:
set tcp:tcp_conn_hash_size=32768
set rlim_fd_cur=8192
set rlim_fd_max=8192
更多的调整信息请查阅: http://docs.sun.com/db/doc/806-7009(Solaris9)?/FONT>
4.1.3 AIX
AIX用no命o调整TCP参数Q等待时间间隔tcp_timewait: no -o tcp_timewait=4,tcp.timewait参数讄??5U间隔,?分钟。运行no -a命o显C网l当前的所有属性倹{由于UDP_SENDSPACE默认的缓存大是8k,为减I/O异常,需调整?2k:
no -o udp_sendspace=32768。此? 当WebLogic HTTPh忙时,可以调整侦听队列的最大长somaxconn?192(默认值是1024)?BR>
更多信息:http://publib16.boulder.ibmo.com/pseries/en-us/aixbman/prftungd/prftungd.htm?/FONT>
4.1.4 Linux
调整Linuxpȝ使用sysctl命o修改TCP参数{待旉间隔:sysctl -w ip_ct_tcp_timeout_time_wait=60;调整打开文g的最大数:?etc/sysctl.conf文g中,d: Fs.file-max=65535,然后q行sysctl -p;调整打开文g描述W最大数?192:?etc/security/limits.conf文gQ添?WebLogic hard nofile 8192(仅针对WebLogic用户),然后在WebLogic启动文g里运行ulimit-n 8192Ȁz设|?BR>
更多信息h?http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html?/FONT>
4.1.5 Windows
Windowspȝ的调整通过修改注册表HKEY-LOCAL-MACHINESYSTEMCurrent ControlSetServices文gҎ完成。可以调整TcpipParameters子文件夹中的{待旉间隔旉TcpTimedWaitDelay参数的倹{侦听队列最大长度的默认gؓ15Qؓ修改它,可在InetinfoParameters子目录中创徏DWORD条目ListenBackLog?BR>此外,Windows2000的Service Pack(要求sp3以上)也会影响pȝE_? http://e-docs.bea.com/platform/suppconfigs/configs81/win2ksvr_as_data_pentium/81sp3.html?/FONT>
W五?性能监控和性能分析(目录)
5.1 性能瓉
最?介绍一下实际分析J2EE应用性能的常用命令和工具。对于实C个高性能的J2EE应用来说,掌握了J2EE调优的理论经验还是不够的。掌握性能监控,发现瓉和问题诊断才是保证J2EEpȝ持箋高效q行的关键?BR>瓉指的是限值所有吞吐操作以及严重媄响反应时间的pȝ内资源。在分布式系l内Lq纠正瓶颈是非常困难的,需要有l验的团队来解决。瓶颈会发生在Web服务器上Q程序代码中Q应用服务器上,数据库,操作pȝ或者网l,g上。经验表明,瓉很容易发生在如下地方Q数据库q接与队列中Q应用服务器的程序代码中Q应用服务器和Web服务器硬件上Q网l和TCP配置中。实际中可以着力对q些环节q行监控?BR>
5.2 操作pȝ监控
操作pȝ层面的性能监控主要是对内存、CPU、I/O和交换区的用情况进行监控分析。windowsq_可以通过d理器和perfmon工具查看。如果是unixpȝ可以使用statpd命o(vmstat, mpstat, iostat)监控内存、CPU和I/O的即时变?使用swap命o查看交换区的使用情况。如果操作系l安装了top、topas、glance{用工?则用top、topas、glance能更ؓ方便地看到WebLogicq程Ҏ作系l的内存,CPU和I/O资源使用的即时变化情c?BR>
而网l方面的性能可以通过ping和netstat{命令来监控,主要几个关键的网l统计?如数据包再发送、重复数据包和数据包侦听丢失?BR>
说明:本文提到的unix命oq适用所有操作系l?仅供参考?/FONT>
5.3 数据库监?/B>
数据库层面的监控q里为oracle9iZ来说?可以采用oracle自带的工具Oracle
Interprise Manager Console来监控session和sql的执行情c还有其他专业的数据库监控工具可以?比如QUEST的spotlight(http://www.quest.com/spotlight-portal/)可以非常形象和直观地对Oracle数据库的CPU、内存、I/O、Data Buffer Size、Shared Pool Size、Redo Buffer{参数进行即时监?q自动对不正常的参数以红色显C?/FONT>
5.4 WebLogic监控
5.4.1 JVM监控
采用java参数-verbose:gc 来分析JVM的GC非常J琐Q而且不直观。?Xloggc:gc.log 参数GC日志写入文g,采用GC 工具HPjtune (http://www.javaperformancetuning.com/tools/hpjtune/index.shtml)q行分析,可以L看出当前jvm参数配置是否合理?BR>
严格意义上来说HPjtune是一个分析工?不是监控工具。这里不得不提及jRocket,Intelq_上最快的JVM, 在WebLogic启动命o中增?Xmanagement参数,可以执行beajrockit81sp3_142_04in下console命o监控WebLogic的内存用和CPU负蝲情况。设|Tools/Preferences菜单中的Mode of operation属性ؓdeveloper, jRocket提供Method Profiler工具Q她能够所有在JRockit Java虚拟Z执行的成员方法的调用ơ数、执行的L间和每次调用的执行时间都l计出来Q进行代码调优Q这是jRockit的又一大优ѝ?/FONT>
5.4.2 Console监控
WebLogic Console除了理配置功能之外,提供了丰富的监控功能。通过WebLogic ConsoleQ首先我们可以查看服务器的运行情c?/FONT>
5.4.2.1 Server监控
通过使用服务器的Performance Monitoring选项卡,可以查看到请求吞吐量Q执行队列积压情况以及JVM栈利用情c而通过点击Performance Genaral选项卡中?Monitor all Active Queues...”可以查看所以执行线E的当前l计数据。此外Monitoring选项卡还可以监控JTA和JMS{Service的情c?/FONT>
5.4.2.2 JDBC监控
在连接池Monitoring选项卡中QWebLogic Console为每一个数据库q接池提供了实时l计信息。其中有三个重要参数可以反应WebLogic Server的健L况:Connections High、Wait Second High和Waiters High。Connection High表示从服务器启动开始后到达池的最大连接数量,如果大于池的最大数量,则需要调整Maxium Capacity。Waiters High表示在没有可用连接的情况下,应用E序{待q接的最大个数。我们可以根据Waiters High的大调整连接池定w。更多的参数可以通过Customize this view链接d,参数含义参?http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_monitor.html#1104829?/FONT>
5.4.2.3 WEB监控
Web Application Monitoring选项卡可以监控WEB应用的Session个数,以及Servlet的响应情?ȀzSession Monitoring Enabled可以获取所有session的统计情c更多信息请参?
http://e-docs.bea.com/wls/docs81/ConsoleHelp/web_applications.html#1106723?/FONT>
5.4.2.4 JMS监控
Welogic Console JMS监控功能比较?不仅在Server JMS Monitoring选项卡可以监控Active JMS Connections, Pooled JMS Connections和Active JMS Servers的连接和使用情况。还可以监控JMS Session Pool、Active JMS Destinations和Durable Subscribers的消费和生情况。比?我们可以监控到JMS Queue的接收和消费消息的数量和字节数。有关JMS监控的详l情况可参见:http://edocs.bea.com/wls/docs81/ConsoleHelp/jms_monitor.html?BR>
5.4.2.5 EJB监控
EJB监控包括对SLSB,SFSB,Entity Bean,MDB四种EJB的监控。本为EJB监控提供了非怸富的q行时统计信?http://e-docs.bea.com/wls/docs81/ConsoleHelp/ejb.html#1105036),非常有利于我们对EJBq行性能调优?BR>
SLSB选项卡ؓ用户提供实例池的q行时统计信息。Pool Miss Ratio 表示实例池的Miss?Pool Waiter Total Count 表示U程{待bean 实例的篏计时?Pool Timeout Total Count表示时的线E数。当Pool Miss Ratio较大?可以增加max-beans-free-pool?BR>
SFSB可以xCache Miss Ratio和Activation Count。Cache Miss Ratioq大?调大max-bean-in-cache未必有帮?需要尝试不用的max-bean-in-cache以获得最低的Cache Miss Ratio。激zd严重减慢应用E序的速度,如果某一个bean的Activation Count的D高,那么需要考虑增加max-bean-in-cache的大?BR>Entity Beanl合了SLSB的free pool和SFSB的cache。可以结合上面的{略q行监控?
而MDB仅比SLSB多一个参数JMSConnection Alive,报告EJB是否成功q接到JMS目的地?BR>
更多Console监控信息可参?/FONT>http://edocs.bea.com/wls/docs81/ConsoleHelp/index.html?/FONT>
5.4.3 实用工具分析
WebLogic除了提供Consoleq行应用监控之外,用户q可以编写JMXE序或者通过SNMP协议q行监控。而QUEST Spotlight for WebLogic Server提供了类似WebLogic ConsolecM的监控功?q对异常情况昄?BR>q里不得不提到实战中l常用来分析性能瓉的工具THREAD DUMP,l一的命令是使用 weblogic.Admin 命o THREAD_DUMP。而在 windows上还可以使用<Ctrl>+<Break> 来创断问题所需的线E{储Thread Dump,而在unix上用kill -3 <wlspid>命o。我们从中可以看到WebLogic后台U程的运行情?通常需要每?0U左xl执行几ơ以助诊断问题。更多信息可以参考BEA实战集锦?/FONT>
5.5 应用E序分析
应用E序分析除了凭借程序员丰富的经验和敏锐的洞察力Mh工检查代码之?使用厂家的工具也是节省时间的不错选择。目前市Z有Borland Optimizeit Enterprise Suite和QUEST Jprobe两个产品可以用来分析性能瓉,垃圾攉,内存泄漏,U程死锁和代码复盖等。Hpjmeter是一个免费的工具,也具有以上类似的性能分析功能?BR>
而Borland Optimizeit Server Trace,HP OpenView Transaction Analyzer和Mercury LoadRunner J2EE breakdown都可以用来分解J2EE应用从客L讉K到最l数据库操作每一层次p的时?甚至_到每一个方法的执行旉。Server Traceq具有检查内存泄漏,q接泄漏和错误警告等功能,一般在试环境中用。而HP OTVA的优势在于运行时监控,LoadRunner优势在于压力试?/FONT>
ȝ(目录)
J2EE调优是一门实践和l验U学Q是一个复杂而往复的q程。其原则是:合理。合?看似?l细品味,意味深长。本文所q的调优{略q不是一成不变的Q只是ؓ了给大家一个参考徏议,让大家少走弯路,关键是根据实际环境调优。欢q有兴趣的朋友在论坛上积极讨论和批评指正?/FONT>