ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:212.45KB ,
资源ID:29547406      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29547406.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(BEA WebLogic平台下J2EE调优攻略.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

BEA WebLogic平台下J2EE调优攻略.docx

1、BEA WebLogic平台下J2EE调优攻略BEA WebLogic平台下J2EE调优攻略摘要:随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说,在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以J2EE调优显得非常重要,而BEA webLogic Server是业界领先的应用服务器,BEA webLogic平台下的J2EE调优也就尤为重要,她将为我们提供普遍的J2EE调优方案。最近网络、杂志上的J2EE调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家,抛砖引玉。目录前 言第一章 应用程序调优1.

2、1.1 通用代码调优1.1.2 减小没有必要的操作1.1.3 使用合适的类型1.1.4 尽量使用pool,buffer和cache1.2 JDBC代码调优1.2.1 严格资源使用1.2.2 实用技巧1.2.3 优化SQL语句1.3 web代码调优1.3.1 HttpSession的使用1.3.2 jsp代码调优1.3.3 Servlet代码调优1.4 JMS代码调优1.4.1 注意必要的事项,避免使用不必要的特征1.4.2 消息类型的选择1.4.3 确认方式的选择和JMS事务1.5 EJB代码调优1.5.1 有效使用设计模式1.5.2 使用EJB和webLogic的特性1.5.3 缓存资源1.

3、5.4 如何选择和使用Entity Bean1.5.5 其他的一些小技巧第二章 应用服务器调优2.1 JVM调优2.1.1 垃圾收集和堆大小2.1.2 jRockit调优2.2 Server调优2.2.1 尽量使用本地I/O库2.2.2 调整默认执行线程数2.2.3 调整连接参数2.2.4 创建新的执行队列2.3 JDBC调优2.3.1 调整连接池配置2.4 web调优2.4.1 调整web应用描述符2.5 JMS调优2.6 EJB调优2.6.1 调整pool和cache2.6.2 优化事务隔离级别和事务属性2.6.3 其他一些小技巧第三章 数据库调优3.1.1 Oracle性能优化3.1.2

4、 Oracle的其他调整第四章 操作系统调优4.1 操作系统调整4.1.1 HP-UX4.1.2 Solaris4.1.3 AIX4.1.4 Linux4.1.5 Windows第五章 性能监控和性能分析5.1 性能瓶颈5.2 操作系统监控5.3 数据库监控5.4 webLogic监控5.4.1 JVM监控5.4.2 Console监控5.4.3 实用工具分析5.5 应用程序分析总结参考文献关于作者前 言(目录)随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说,在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以J2

5、EE调优显得非常重要,而BEA webLogic Server是业界领先的应用服务器,BEA webLogic平台下的J2EE调优也就尤为重要,她将为我们提供普遍的J2EE调优方案。最近网络、杂志上的J2EE调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家,抛砖引玉。本文从J2EE应用架构(下图)来分别剖析系统调优,首先我们一般会从应用程序出发,去审核代码,做到代码级的优化,然后再调整应用服务器(BEA webLogic8.1)和数据库 (Oracle9i)的参数,最后当然是调整操作系统和网络的性能(包括硬件升级)。诚然,在我遇到的很多项目中,都是出现了性能问题后才想到调优,而

6、且一般都是先进行系统参数调整,实在解决不了才会对代码进行检查.实际上,我们应当将代码级的调优放在应用设计时来做,测试生产时修改代码将是一件极其痛苦的事情。webLogic平台J2EE应用架构第一章应用程序调优1.1.1 通用代码调优1.1.2 减小没有必要的操作对象的创建是个很昂贵的工作,所以我们应当尽量减少对象的创建,在需要的时候声明它,初 始化它,不要重复初始化一个对象,尽量能做到再使用,而用完后置null有利于垃圾收集。让类实现Cloneable接口,同时采用工厂模式,将减少类的创建,每次都是通过clone()方法来获得对象。另外使用接口也能减少类的创建。对于成员变量的初始化也应尽量避免

7、, 特别是在一个类派生另一个类时。异常抛出对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为, fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 异常只能用于错误处理,不应该用来控制程序流程。此外, 建议关闭Debug输出,尽量少用串行化、同步操作和耗时昂贵的服务(如Date()。1.1.3 使用合适的类型当原始类型不能满足我们要求时,使用复杂类型。String和StringBuffer的区别自不必说

8、了,是我们使用最多的类型,在涉及到字符运算时,强烈建议使用StringBuffer。在做String匹配时使用intern()代替equal()。带有final修饰符的类是不可派生的, 如果指定一个类为final,则该类所有的方法都是final。java编译器会寻找机会内联所有的final方法,这将能够使性能平均提高50%。类的属性和方式使用final或者static修饰符也是有好处的。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。所以尽量使用局部变量。ArrayList和Vector,HashMap和Hashtable是我们经常用到的类,前者不支持同步,

9、后者支持同步,前者性能更好,大多数情况下选择前者。1.1.4 尽量使用pool,buffer和cache使用pool、buffer和cache能大大提高系统的性能,这在J2EE的大部分技术中都是适用的。在webLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作中,buffer是必须的,特别是对大文件的操作,不然容易造成内存溢出。字节操作最快,所以尽可能采用write(byte),Buffered FileOutputStream比Buffered FileWriter要快,因为FileWrit

10、er需要Unicode到Byte的转换。而后面讲到的JDBC、jsp、EJB和JMS我们都非常建议使用buffer和cache。为HttpServletResponse设置buffersize,使用wl-cache,缓存在JNDI树上获取的对象等等。此外,使用JDK 1.4的非阻塞I/O对性能也有很大提高。1.2 JDBC代码调优1.2.1 严格资源使用JDBC代码调优最大的原则就是使用webLogic的连接池,而不是自己直连数据库。在我接触的很多自己实现连接池的项目中,大部分遇到死锁和连接泄漏的问题,最后得不得修改代码。而webLogic提供了功能强大,性能良好的数据库连接池,我们要做的只是

11、封装一个连接管理类,从JNDI树上获取数据源并缓存,得到连接,并提供一系列关闭数据库资源的方法。对任何资源使用的原则是用完即关,不管是数据库资源、上下文环境,还是文件。数据库资源的泄漏极易造成内存泄漏,乃至系统崩溃。在使用完数据库资源后依次关闭ResultSet,Statement和Connection,而在一个数据库连接多次进行数据库操作时要特别注意ResultSet和Statement依次关闭。try/open connectionpstmt =conn.prepareStatement(strSql1);pstmt.executeUpdate();pstmt.close();pstmt

12、=conn.prepareStatement(strSql2);rs=pstmt.executeQuery();while (rs.next()/processrs.close();pstmt.close();catch(Exception e)/close rs,psmt,confinally/close rs,psmt,con1.2.2 实用技巧在JDBC操作中还有一些小的技巧跟大家分享:由于获取连接时默认自动提交方式,使用connection.setAutoCommit(false)关闭自动提交,使用PreparedStatement,批量更新,业务复杂或者大数据量操作时使用存储过程,尽

13、量使用RowSet,此外设置记录集读取缓存FetchSize和设置记录集读取方向FetchDirection对性能也有一定的提高。1.2.3 优化SQL语句SQL语句的优化牵涉到很多数据库的知识,需要与索引配合,因此需要DBA对代码中的SQL进行检查测试。常见的,select *不提倡使用,效率极差,建议显式获取列,即使是所有字段也应罗列,而取总数时使用count(*),为提高cache的命中率,尽量做到SQL重用。对于大数据量的查询,可以充分利用Oracle数据库的特性,每次取出m-n行的数据,实现分页查询。另外,提高性能的好选择可能就是把所有的字符数据都保存为Unicode,java以Un

14、icode形式处理所有数据,因此,数据库驱动程序不必再执行转换过程。1.3 web代码调优1.3.1 HttpSession的使用应用服务器保存很多会话时,容易造成内存不足,所以尽量减少session的使用,放置session里的对象不应该是大对象,最好是简单小对象,实现串行化接口。当会话不再需要时,应当及时调用invalidate()方法清除会话。而当某个变量不需要时,及时调用removeAttribute()方法清除变量。请勿将EJB对象放置在session中。1.3.2 jsp代码调优目前,在jsp页面中引入外部资源的方法主要有两种:include指令,以及include动作。 incl

15、ude指令:例如,该指令在编译时引入指定的资源。在编译之前,带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定,比运行时才确定资源更高效。include动作:例如。该动作引入指定页面执行后生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但是,只有当被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算。对于那些无需跟踪会话状态的jsp,关闭自动创建的会话可以节省一些资源。使用如下page指令: ;尽量不要将jsp页面定义为单线程,应设置为;在jsp页面最好使用输出缓存功能,如: ;尽量

16、用wl:cache定制标记来缓存静态或相对静态的内容,缓存jsp:include操作的结果能显著提高应用程序的运行性能。1.3.3 Servlet代码调优Servlet代码调优比较简单:在Servlet之间跳转时,forward比sendRedirect更有效;设置HttpServletResponse 缓冲区,如:response.setBufferSize(20000);在init()方法里缓存静态数据,而在destroy()中释放它;建议在Servlet里使用ServletOutputStream输出图片等对象;避免在Servlet和jsp中定界事务等。1.4 JMS代码调优1.4.1

17、注意必要的事项,避免使用不必要的特征JMS提供了强有力的消息处理机制,但是为了最大限度的提高JMS系统的性能,应避免使用不需要使用的特征,同时也要注意必要的事项。比如:尽量使用接收程序能直接使用的最简单、最小的消息类型;消息选择器要尽可能简单(最好不使用),尽量不要使用复杂的操作符,如like、in或者between等,使用字符串数据类型的速度最慢;务必为特定的应用程序定义特定的JMS连接工厂,并且禁用默认的JMS连接工厂;不要在javax.*与weblogic.*的名字空间中使用JNDI名称;尽量使用异步消费者,线程不必封锁以等待消息的到达;使用完JNDI树上的资源后注意关闭。1.4.2 消

18、息类型的选择标准JMS提供了五种消息类型,而TextMessage应用最为普遍, 当发送的消息是几种原始数据类型的集合体时,最好使用MapMessage消息类型,而不要使用ObjectMessage,以便减少不同系统间的耦合。此外消息是否使用压缩要慎重考虑,压缩未必能减少消息大小。如果生产者、消费者和目的地并置在同一webLogic Server内部,通常不使用压缩。webLogic特有的XMLMessage能为运行于消息主体之上的消息选择器提供内嵌式支持,而且易于数据交换。因此,建议应用程序之间传送消息使用XML消息格式,而应用程序内部间传送消息使用二进制消息格式。1.4.3 确认方式的选择

19、和JMS事务使用事务性会话时,尽量使用恰当的消息确认方式:如果需求允许,使用NO_ACKKNOWLEDGE;非持久的订阅者使用DUPS_OK_ACKNOWLEDGE或者MULTICAST_NO_ACKNOWLEDGE。而使用JTA的UserTransaction,确认方式将被忽略。在使用JMS事务时,无效的消息会导致事务的回滚,以致消息重发这样的死循环。此时,可以将无效消息发送到错误消息队列,并提交JMS事务,这将确保消息不会再次传递。1.5 EJB代码调优1.5.1 有效使用设计模式GoF 的设计模式为我们实现高性能、易扩展的J2EE应用提供理论保障和技术支持。而EJB作为J2EE的核心组件

20、和技术,善用设计模式对系统性能影响很大。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中;使用值对象等简单对象传递数据

21、;不直接使用get/set方法操作Entity Bean。当然过度使用模式或者牵强套用模式也是不提倡的,总的原则就是减少网络流量,改进事务管理。1.5.2 使用EJB和webLogic的特性使用EJB和webLogic的新特性往往能提高性能。与EJB2.0特性相关的技巧有:一个Application中使用本地接口,对于Entity Bean肯定使用本地接口,避免远程调用的开销;使用CMP管理关系,而不是BMP,EJB2.0中CMP的性能大大改善,性能和移植性都优于BMP;使用ejbSelect进行内部查询;使用home方法进行外部查询和批处理; 数据库驱动级联删除等。与webLogic特性相关

22、的技巧有:使用自动生成主键,webLogic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功能,节约了Entity Bean产生主键的时间,同时设key-cache-size不小于100;webLogic管理事务性能更好,使用容器管理,而不是Bean管理事务;webLogic提供了为CMP动态查询和批量插入功能,对性能也有很大帮助。1.5.3 缓存资源对SLSB或者MDB来说,使用setMesssageDrivenContext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放; 对SLSB或者MDB来说,使用setSessionCont

23、ext()或者ejbCreate()方法缓存特定资源,在ejbRemove()方法里释放;对Entity Bean来说,使用setEntityContext ()方法缓存特定资源,在unSetEntityContext ()方法里释放。1.5.4 如何选择和使用Entity Bean1. 在设计EJB时,要适当考虑EJB的粒度, 细粒度的EJB在事务管理和资源管理的开销太大,尽量创建粗粒度的 EJB , 不要太粗,粗到能满足实际需求就可以;2. Entity Bean不是唯一方式,如果只有一个很小的数据子集被经常改变,建议采用JDO;3. 在操作大数据量的时候,直接采用JDBC比Entity

24、Bean更有效;4. 避免采用返回很大数据组的finder方法,如 FindAll() 方法,因为它的实现代价太大;5. 考虑设置域组field groups,减少没有必要并昂贵的属性加载,如BLOB;6. 对于EJB1.1或者BMP,可以设置is-modified-method-name属性,根据isModified()的值来判断是否调用ejbStore()等方法,减少没有必要运算;7. 避免连接多个表创建BMP,可以使用视图,存储过程或者O/R Mapping等方式。1.5.5 其他的一些小技巧1. 考虑使用 javax.ejb.SessionSynchronization 接口,提供在R

25、ollback之后恢复数据的方法: afterBegin(), beforeCompletion(), afterCompletion();2. 使用完SFSB之后,调用remove()方法释放实例;3. 假如你不需要EJB服务的时候,建议使用普通java类;4. 避免EJB之间相互调用;5. 使用多读模式。第二章 应用服务器调优(目录)2.1 JVM调优2.1.1 垃圾收集和堆大小垃圾收集(GC)是指JVM释放java堆中不再使用的对象所占用的内存的过程,而java堆(Heap)是指java应用程序对象生存的空间。堆大小决定了GC的频度和时间。堆越大,GC频度低,速度慢。堆越小,GC频度高,

26、速度快。所以GC和堆大小是一组矛盾。为了获取理想的Heap堆大小,需要使用-verbosegc参数(Sun jdk: -Xloggc:)以打开详细的GC输出。分析GC的频度和时间,结合应用最大负载所需内存情况,得出堆的大小。 通常情况下,我们建议使用可用内存(除操作系统和其他应用程序占用之外的内存)70-80%,为避免堆大小调整引起的开销,设置内存堆的最小值等于最大值即:-Xms=-Xmx。而为了防止内存溢出,建议在生产环境堆大小至少为256M(Platform至少512M),实际环境中512M1G左右性能最佳,2G以上是不可取的,在调整内存时可能需要调整核心参数进程的允许最大内存数。对于su

27、n和hp的jvm,永久域太小(默认4M)也可能造成内存溢出,应增加参-XX:MaxPermSize=128m。建议设置临时域-Xmn的大小为-Xmx的1/41/3, SurvivorRatio为8。为了获得更好的性能,建议在启动文件设置webLogic为产品模式,此时sun和hp jvm JIT引擎为-server,默认情况下打开JIT编译模式对性能也有帮助。调整Chunk Size和Chunk Pool Size也可能对系统的吞吐量有提高。此外还需关闭显示GC: -XX:+DisableExplicitGC。当然在Intel平台上使用jRockit(使用参数-jrockit)无疑大大提高we

28、bLogic性能。2.1.2 jRockit调优jRockit支持四种垃圾收集器:分代复制收集器、单空间并发收集器、分代并发收集器和并行收集器。默认状态下,JRockit使用分代并发收集器。要改变收集器,可使用-Xgc:,对应四个收集器分其他为gencopy, singlecom, gencon以及parallel。为得到更好的响应性能,应该使用并发垃圾回收器:-Xgc:gencon,可使用-Xms和-Xmx设置堆栈的初始大小和最大值,要设置护理域-Xns为-Xmx的10%。而如果要得到更好的性能,应该选用并行垃圾回收器:-Xgc: parallel,由于并行垃圾回收器不使用nursery,不

29、必设置-Xns。如果你的线程大于100或者在linux平台下,可以尝试使用瘦线程模式:-Xthinthread,同时关闭Native IO:-Xallocationtype:global。jRockit 还提供了强大的图形化监控工具Jrockit Management Console。欲详细了解JRockit可访问:2.2 Server调优webLogic Server的核心组件由监听线程,套接字复用器和可执行线程的执行队列组成。当服务器由监听线程接收到连接请求后,将对它的连接控制权交给等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的请求,并将此请求及相关安全信息或事务处理环境一起

30、置入适当的执行队列中(一般为默认的执行队列)。 当有一个请求出现在执行队列中时,就会有一个空闲的执行线程从该队列中取走发来的该请求,并返回应答,然后等待下一次请求。因此要提高webLogic的性能,就必须从调整核心组件性能出发。2.2.1 尽量使用本地I/O库 webLogic Server有两套套接字复用器:java版和本地库。采用小型本地库更有效,尽量激活Enable Native IO(默认),此时UNIX默认使用CPUs+1个线程,Window下为双倍CPU。如果系统不能加载本地库,将会抛出java.lang.UnsatisfiedLinkException,此时只能使用java套接字复用器,可以调整socket readers 百分比,默认为33%。该参数可以在Console Server Tuning Configuration配置栏里设置。2.2.2 调整默认执行线程数理想的默认执行线程数是由多方面的因素决定的,比如机器CPU性能、总线体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。webLogic生产环境下默认的线程为25个,随着CPU个数的增加,we

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1