




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、传播优秀word版文档 ,希望对您有帮助,可双击去除!weblogic优化大全摘要:随着近来j2ee软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说,在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以j2ee调优显得非常重要,而bea weblogic server是业界领先的应用服务器,bea weblogic平台下的j2ee调优也就尤为重要,她将为我们提供普遍的j2ee调优方案。最近网络、杂志上的j2ee调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家,抛砖引玉。前 言 随着近来j2ee软件广泛地应用于各行各业
2、,系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说,在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以j2ee调优显得非常重要,而bea weblogic server是业界领先的应用服务器,bea weblogic平台下的j2ee调优也就尤为重要,她将为我们提供普遍的j2ee调优方案。最近网络、杂志上的j2ee调优文章层出不穷。本人也将自己平时工作中的一些经验积累分享给大家,抛砖引玉。本文从j2ee应用架构(下图)来分别剖析系统调优,首先我们一般会从应用程序出发,去审核代码,做到代码级的优化,然后再调整应用服务器(bea weblogic8.1)和数据库
3、 (oracle9i)的参数,最后当然是调整操作系统和网络的性能(包括硬件升级)。诚然,在我遇到的很多项目中,都是出现了性能问题后才想到调优,而且一般都是先进行系统参数调整,实在解决不了才会对代码进行检查.实际上,我们应当将代码级的调优放在应用设计时来做,测试生产时修改代码将是一件极其痛苦的事情。weblogic平台j2ee应用架构第一章 应用程序调优1.1.1 通用代码调优1.1.2 减小没有必要的操作对象的创建是个很昂贵的工作,所以我们应当尽量减少对象的创建,在需要的时候声明它,初始化它,不要重复初始化一个对象,尽量能做到再使用,而用完后置null有利于垃圾收集。让类实现cloneable
4、接口,同时采用工厂模式,将减少类的创建,每次都是通过clone()方法来获得对象。另外使用接口也能减少类的创建。对于成员变量的初始化也应尽量避免, 特别是在一个类派生另一个类时。异常抛出对性能不利。抛出异常首先要创建一个新的对象。throwable接口的构造函数调用名为, fillinstacktrace()的本地(native)方法,fillinstacktrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,vm就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 异常只能用于错误处理,不应该用来控制程序流程。此外, 建议关闭debug输出,尽量少用串行化、同步操作和耗时昂贵的
5、服务(如date()。传播优秀word版文档 ,希望对您有帮助,可双击去除!1.1.3 使用合适的类型当原始类型不能满足我们要求时,使用复杂类型。string和stringbuffer的区别自不必说了,是我们使用最多的类型,在涉及到字符运算时,强烈建议使用stringbuffer。在做string匹配时使用intern()代替equal()。带有final修饰符的类是不可派生的, 如果指定一个类为final,则该类所有的方法都是final。java编译器会寻找机会内联所有的final方法,这将能够使性能平均提高50%。类的属性和方式使用final或者static修饰符也是有好处的。调用方法时传
6、递的参数以及在调用中创建的临时变量都保存在栈(stack)中,速度较快。所以尽量使用局部变量。arraylist和vector,hashmap和hashtable是我们经常用到的类,前者不支持同步,后者支持同步,前者性能更好,大多数情况下选择前者。1.1.4 尽量使用pool,buffer和cache使用pool、buffer和cache能大大提高系统的性能,这在j2ee的大部分技术中都是适用的。在weblogic中就大量使用了池:jdbc connection pool、socket pool、object pool和thread pool。i/o操作中,buffer是必须的,特别是对大文件
7、的操作,不然容易造成内存溢出。字节操作最快,所以尽可能采用write(byte ),buffered fileoutputstream比buffered filewriter要快,因为filewriter需要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代码调优最大的原则就是使用webl
8、ogic的连接池,而不是自己直连数据库。在我接触的很多自己实现连接池的项目中,大部分遇到死锁和连接泄漏的问题,最后得不得修改代码。而weblogic提供了功能强大,性能良好的数据库连接池,我们要做的只是封装一个连接管理类,从jndi树上获取数据源并缓存,得到连接,并提供一系列关闭数据库资源的方法。对任何资源使用的原则是用完即关,不管是数据库资源、上下文环境,还是文件。数据库资源的泄漏极易造成内存泄漏,乃至系统崩溃。在使用完数据库资源后依次关闭resultset,statement和connection,而在一个数据库连接多次进行数据库操作时要特别注意resultset和 statement依次
9、关闭。try/open connectionpstmt =conn.preparestatement(strsql1);pstmt.executeupdate();pstmt.close();pstmt =conn.preparestatement(strsql2);rs=pstmt.executequery();while (rs.next()/processrs.close();pstmt.close();catch(exception e)/close rs,psmt,confinally/close rs,psmt,con传播优秀word版文档 ,希望对您有帮助,可双击去除!1.2.2
10、 实用技巧在jdbc操作中还有一些小的技巧跟大家分享:由于获取连接时默认自动提交方式,使用 connection.setautocommit(false) 关闭自动提交,使用preparedstatement,批量更新,业务复杂或者大数据量操作时使用存储过程,尽量使用rowset,此外设置记录集读取缓存fetchsize和设置记录集读取方向fetchdirection对性能也有一定的提高。1.2.3 优化sql语句sql语句的优化牵涉到很多数据库的知识,需要与索引配合,因此需要dba对代码中的sql进行检查测试。常见的,select *不提倡使用,效率极差,建议显式获取列,即使是所有字段也应罗
11、列,而取总数时使用count(*),为提高cache的命中率,尽量做到sql重用。对于大数据量的查询,可以充分利用oracle数据库的特性,每次取出m-n行的数据,实现分页查询。另外,提高性能的好选择可能就是把所有的字符数据都保存为unicode,java以unicode形式处理所有数据,因此,数据库驱动程序不必再执行转换过程。1.3 web代码调优1.3.1 httpsession的使用应用服务器保存很多会话时,容易造成内存不足,所以尽量减少session的使用,放置session里的对象不应该是大对象,最好是简单小对象,实现串行化接口。当会话不再需要时,应当及时调用invalidate()
12、方法清除会话。而当某个变量不需要时,及时调用removeattribute()方法清除变量。请勿将ejb对象放置在session中。传播优秀word版文档 ,希望对您有帮助,可双击去除!1.3.2 jsp代码调优目前,在jsp页面中引入外部资源的方法主要有两种:include指令,以及include动作。 include指令:例如<% include file="copyright.html" %>,该指令在编译时引入指定的资源。在编译之前,带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定,比运行时才确定资源更高效。inc
13、lude动作:例如<jsp:include page="copyright.jsp" />。该动作引入指定页面执行后生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但是,只有当被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算。 对于那些无需跟踪会话状态的jsp,关闭自动创建的会话可以节省一些资源。使用如下page指令: <% page session="false"%> ;尽量不要将jsp页面定义为单线程,应设置为<%page isthreadsa
14、fe=”true”%>在jsp页面最好使用输出缓存功能,如: <%page buffer="32kb"%>尽量用wl:cache定制标记来缓存静态或相对静态的内容,缓存jsp:include操作的结果能显著提高应用程序的运行性能。1.3.3 servlet代码调优servlet代码调优比较简单:在servlet之间跳转时,forward比sendredirect更有效;设置 httpservletresponse 缓冲区,如:response.setbuffersize(20000);在init()方法里缓存静态数据,而在destroy()中释放它;建议在
15、 servlet里使用servletoutputstream输出图片等对象;避免在servlet和jsp中定界事务等。1.4 jms代码调优1.4.1 注意必要的事项,避免使用不必要的特征jms提供了强有力的消息处理机制,但是为了最大限度的提高jms系统的性能,应避免使用不需要使用的特征,同时也要注意必要的事项。比如:尽量使用接收程序能直接使用的最简单、最小的消息类型;消息选择器要尽可能简单(最好不使用),尽量不要使用复杂的操作符,如like、in或者between 等, 使用字符串数据类型的速度最慢;务必为特定的应用程序定义特定的jms连接工厂,并且禁用默认的jms连接工厂;不要在javax
16、.*与 weblogic.*的名字空间中使用jndi名称;尽量使用异步消费者,线程不必封锁以等待消息的到达;使用完jndi树上的资源后注意关闭。1.4.2 消息类型的选择标准jms提供了五种消息类型,而textmessage应用最为普遍, 当发送的消息是几种原始数据类型的集合体时,最好使用mapmessage消息类型,而不要使用objectmessage,以便减少不同系统间的耦合。此外消息是否使用压缩要慎重考虑,压缩未必能减少消息大小。如果生产者、消费者和目的地并置在同一weblogic server内部,通常不使用压缩。weblogic特有的xmlmessage能为运行于消息主体之上的消息选
17、择器提供内嵌式支持,而且易于数据交换。因此,建议应用程序之间传送消息使用xml消息格式,而应用程序内部间传送消息使用二进制消息格式。1.4.3 确认方式的选择和jms事务使用事务性会话时,尽量使用恰当的消息确认方式:如果需求允许,使用no_ackknowledge;非持久的订阅者使用 dups_ok_acknowledge或者multicast_no_acknowledge。而使用jta的usertransaction,确认方式将被忽略。在使用jms事务时,无效的消息会导致事务的回滚,以致消息重发这样的死循环。此时,可以将无效消息发送到错误消息队列,并提交jms事务,这将确保消息不会再次传递。
18、传播优秀word版文档 ,希望对您有帮助,可双击去除!1.5 ejb代码调优1.5.1 有效使用设计模式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的访问;使用门面模
19、式,不暴露entity bean,用session bean封装entity bean;如果可以异步处理,则用mdb代替session bean;封装业务逻辑在轻量级javabean中;使用值对象等简单对象传递数据;不直接使用get/set方法操作entity bean。当然过度使用模式或者牵强套用模式也是不提倡的,总的原则就是减少网络流量,改进事务管理。1.5.2 使用ejb和weblogic的特性使用ejb和weblogic的新特性往往能提高性能。与ejb2.0特性相关的技巧有:一个application中使用本地接口,对于 entity bean肯定使用本地接口,避免远程调用的开销;使用
20、cmp管理关系,而不是bmp,ejb2.0中cmp的性能大大改善,性能和移植性都优于bmp;使用ejbselect进行内部查询;使用home方法进行外部查询和批处理; 数据库驱动级联删除等。与weblogic特性相关的技巧有:使用自动生成主键,weblogic为oracle和sqlserver两种数据库的cmp提供了自动生成主键功能,节约了entity bean产生主键的时间,同时设key-cache-size不小于100;weblogic管理事务性能更好,使用容器管理,而不是bean管理事务; weblogic提供了为cmp动态查询和批量插入功能,对性能也有很大帮助。1.5.3 缓存资源对s
21、lsb或者mdb来说,使用setmesssagedrivencontext()或者ejbcreate()方法缓存特定资源,在 ejbremove()方法里释放; 对slsb或者mdb来说,使用setsessioncontext()或者ejbcreate()方法缓存特定资源,在ejbremove()方法里释放;对entity bean来说,使用setentitycontext ()方法缓存特定资源,在unsetentitycontext ()方法里释放。1.5.4 如何选择和使用entity bean1. 在设计ejb时,要适当考虑ejb的粒度, 细粒度的ejb在事务管理和资源管理的开销太大,尽
22、量创建粗粒度的 ejb , 不要太粗,粗到能满足实际需求就可以;2. entity bean不是唯一方式,如果只有一个很小的数据子集被经常改变,建议采用jdo;3. 在操作大数据量的时候,直接采用jdbc比entity bean更有效;4. 避免采用返回很大数据组的finder方法,如 findall() 方法,因为它的实现代价太大;5. 考虑设置域组field groups,减少没有必要并昂贵的属性加载,如blob;6. 对于ejb1.1或者bmp,可以设置is-modified-method-name属性,根据ismodified()的值来判断是否调用ejbstore()等方法,减少没有必
23、要运算;7. 避免连接多个表创建bmp,可以使用视图,存储过程或者o/r mapping等方式。传播优秀word版文档 ,希望对您有帮助,可双击去除!1.5.5 其他的一些小技巧1. 考虑使用 javax.ejb.sessionsynchronization 接口,提供在rollback之后恢复数据的方法: afterbegin(), beforecompletion(), aftercompletion();2. 使用完sfsb之后,调用remove()方法释放实例;3. 假如你不需要ejb服务的时候,建议使用普通java类;4. 避免ejb之间相互调用;5. 使用多读模式。第二章 应用服务
24、器调优2.1 jvm调优2.1.1 垃圾收集和堆大小垃圾收集(gc)是指jvm释放java堆中不再使用的对象所占用的内存的过程,而java堆(heap)是指java应用程序对象生存的空间。堆大小决定了gc的频度和时间。堆越大,gc频度低,速度慢。堆越小,gc频度高,速度快。所以gc和堆大小是一组矛盾。为了获取理想的heap堆大小,需要使用-verbosegc参数(sun jdk: -xloggc:<file>)以打开详细的gc输出。分析gc的频度和时间,结合应用最大负载所需内存情况,得出堆的大小。通常情况下,我们建议使用可用内存(除操作系统和其他应用程序占用之外的内存)70-80%
25、,为避免堆大小调整引起的开销,设置内存堆的最小值等于最大值即:- xms=-xmx。而为了防止内存溢出,建议在生产环境堆大小至少为256m(platform至少512m),实际环境中512m1g左右性能最佳, 2g以上是不可取的,在调整内存时可能需要调整核心参数进程的允许最大内存数。对于sun和hp的jvm,永久域太小(默认4m)也可能造成内存溢出,应增加参-xx:maxpermsize=128m。建议设置临时域-xmn的大小为-xmx的1/41/3, survivorratio为8。为了获得更好的性能,建议在启动文件设置weblogic为产品模式,此时sun和hp jvm jit引擎为-se
26、rver,默认情况下打开jit编译模式对性能也有帮助。调整chunk size和chunk pool size也可能对系统的吞吐量有提高。此外还需关闭显示gc: -xx:+disableexplicitgc。当然在intel平台上使用jrockit(使用参数-jrockit)无疑大大提高weblogic性能。2.1.2 jrockit调优jrockit支持四种垃圾收集器:分代复制收集器、单空间并发收集器、分代并发收集器和并行收集器。默认状态下,jrockit使用分代并发收集器。要改变收集器,可使用-xgc:<gc-name>,对应四个收集器分其他为gencopy, singleco
27、m, gencon以及parallel。为得到更好的响应性能,应该使用并发垃圾回收器:-xgc:gencon,可使用-xms和-xmx设置堆栈的初始大小和最大值,要设置护理域-xns为-xmx的10%。而如果要得到更好的性能,应该选用并行垃圾回收器:-xgc: parallel,由于并行垃圾回收器不使用nursery,不必设置-xns。如果你的线程大于100或者在linux平台下,可以尝试使用瘦线程模式:-xthinthread,同时关闭native io:-xallocationtype:global。jrockit 还提供了强大的图形化监控工具jrockit management cons
28、ole。欲详细了解jrockit可访问:传播优秀word版文档 ,希望对您有帮助,可双击去除! 2.2 server调优weblogic server的核心组件由监听线程,套接字复用器和可执行线程的执行队列组成。当服务器由监听线程接收到连接请求后,将对它的连接控制权交给等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的请求,并将此请求及相关安全信息或事务处理环境一起置入适当的执行队列中(一般为默认的执行队列)。当有一个请求出现在执行队列中时,就会有一个空闲的执行线程从该队列中取走发来的该请求,并返回应答,然后等待下一次请求。因此要提高weblogic的性能,就必须从调整核心
29、组件性能出发。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 调整默认执行线程数理想的默认执行线程数
30、是由多方面的因素决定的,比如机器cpu性能、总线体系架构、i/o、操作系统的进程调度机制、jvm的线程调度机制。 weblogic生产环境下默认的线程为25个,随着cpu个数的增加,weblogic可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就越多,线程数越小,cpu可能无法得到充分利用。为获取一个理想的线程数,需要经过反复的测试。在测试中,可以以25*cpus为基准进行调整。当空闲线程较少,cpu利用率比较低时,可以适当增加线程数的大小(每五个递增)。对于pc server 和window 2000,则最好每个cpu小于50个线程, 以cpu利用率为90%左右为佳。由于目前w
31、eblogic执行线程没有缩小线程数的功能,所以应将参数threads increase设置为0,同时不应改变优先级的大小。2.2.3 调整连接参数weblogic server用accept backlog参数规定服务器向操作系统请求的队列大小,默认值为50。当系统重载负荷时,这个值可能过小,日志中报connection refused,导致有效连接请求遭到拒绝,此时可以提高accept backlog 25%直到连接拒绝错误消失。对于portal类型的应用,默认值往往是不够的。login timeout和ssl login timeout参数表示普通连接和ssl连接的超时时间,如果客户连接
32、被服务器中断或者ssl容量大,可以尝试增加该值。这些参数可以在console server tuning configration配置栏里找到。传播优秀word版文档 ,希望对您有帮助,可双击去除!2.2.4 创建新的执行队列创建新的执行队列有助于解决核心业务优先、避免交叉阻塞、死锁和长时间处理的业务等问题。通常会将自己的执行队列和默认的执行队列设置不同的优先级, 这里优先级不应设为9或者10。 定义一个新的执行队列很容易,利用view excute queue选项中的configure a new excute queue链接即可定制新的执行队列。创建新的执行队列后,用户需要为应用程序的j2
33、ee组件配置分配策略,以便它可以找到新的队列。举个例子:要将 servlet或jsp捆绑到一个特定的执行队列,必须替换web.xml文件项,将wl-dispatch-policy初始化参数设置为自己的执行队列名。<servlet><servlet-name>servletname</servlet-name><jsp-file>/directoryname/deployment.jsp</jsp-file><init-param><param-name>wl-dispatch-policy</param-
34、name><param-value>newexecutequeuename</param-value></init-param></servlet>我们可以为一个jsp或者servlet乃至一个web应用设置自己的执行队列。同时也可以为ejb设置自己的执行队列。对于执行时间比较长的mdb,建议使用自己的执行队列。2.3 jdbc调优2.3.1 调整连接池配置jdbc connection pool的调优受制于weblogic server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避
35、免两边的资源消耗,建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。增加statement cache size对于大量使用preparedstatement对象的应用程序很有帮助,weblogic能够为每一个连接缓存这些对象,此值默认为10。在保证数据库游标大小足够的前提下,可以根据需要提高statement cache size。比如当你设置连接数为25,cache size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与preparedstatement cache有关的应用程序错误时,你需要将cache size设
36、置为0。尽管jdbc connection pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同时test reserved connections和test released connections也无需勾上。当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。 最后提一下驱动程序类型的选择,以oracle为例, oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大, 随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的
37、移植性明显强于oci驱动。所以在通常情况下建议使用thin驱动。而最新驱动器由于 weblogic server/bin目录下的类包可能不是最新的,请以oracle网站为准: 传播优秀word版文档 ,希望对您有帮助,可双击去除!2.4 web调优2.4.1 调整web应用描述符web应用除代码之外的调优比较简单,仅仅是对一些web应用描述符的调整。首先关闭session monitoring enabled,仅仅在cluster环境下设置session复制(优先使用内存复制),在保证应用正常运行的情况下,设置较短的session超时时间。 同时生产环境下无需检查jsp和servlet:jsp
38、page check secs和servlet reload check secs均设为-1,关闭jspkeep generated 和jspverbose对性能也有帮助。此外,还可以对jsp进行预编译,有两种方法:激活precompile选项;使用weblogic.appc事先编译,建议采用后者。2.5 jms调优1. 增加-dweblogic.jmsthreadpoolsize=n(至少为5),以提高处理jms的线程数,在jrockit上增加-xxenablefatspin以减少加锁冲突;2. 采用文件存储策略,将同步写策略设置为direct-write,同时在windows平台上启用磁盘
39、写入缓存;3. 使用分布式目的地时,激活连接工厂load balancing enabled ,server affinity enabled;4. 为减少服务器不必要的jms请求路由,如果多个目的地之间存在事务,则部署在同一jms服务器上,尽量将连接工厂部署到jms服务器所在的 weblogic实例上,集群环境下,则最好将连接工厂部署到集群中的所有服务器上,而集群中每个jms服务器和目的地成员尽量使用类似的设置;5. 启用消息分页存储功能,以释放内存,可以为jms服务器和目的地设置, 激活messages paging enabled和bytes paging enabled,同时使用限额防
40、止服务器耗尽接收消息的所有可用内存空间;6. 在运行weblogic server进程之外的生产者务必使用流控制, 并增大send timeout;7. 将jms server expiration scan interval设很大的值,能禁止主动扫描过期消息;8. 使用fifo或者lifo方式处理目的地消息;9. mdb的max-beans-in-free-pool不应大于最大mdb线程数(默认线程数/2+1)。 2.6 ejb调优2.6.1 调整pool和cache initial-beans-in-free-pool定义slsb启动时实例的个数,默认为0,可以调大到正常并发数的大小,以减
41、少初始响应时间。 max-beans-in-free-pool为最大个数,默认1000对slsb来说,在频繁创建和删除实例的情况下很有帮助,一般不用调整,至少设为默认线程数,过大容易造成内存溢出。而对entity bean来说,由于是匿名的,所以当频繁使用finder、home和create方法时可以调大。对sfsb来说,尽量将max- beans-in-cache参数设置得足够的大,以满足bean实例对最大并发用户数的要求,可以避免有状态会话bean过多的钝化行为。而idle- timeout-seconds尽量设置小,如果sfsb不用于存储web应用会话状态可以设置为0。对于entity
42、bean来说, max-beans-in-cache同样可以首先采用默认值1000,监控实例缓存和钝化的情况,再做适当调整。并行策略concurrency-strategy定义了实体bean如何管理锁,有四种策略: exclusive、databse、readonly、optimistic。效率依次提高,可靠性依次降低,尽量避免使用互斥策略,如果bean无需更新操作,使用只读策略,更甚的是,如果bean的内容不会改变,可设置read-timeout-seconds为0,乐观并行策略时采用事务间缓存策略,在entity-cache描述符中将cache-between-transactions元素
43、设为true。传播优秀word版文档 ,希望对您有帮助,可双击去除!2.6.2 优化事务隔离级别和事务属性对ejb组件来说,有四种事务隔离水平:transaction-serializable:在处理完成之前拒绝其他处理的读入、可扩展性或插入数据操作; transaction-repeatable-read:防止处理修改正在被其他处理调用的数据; transactoin-read-committed:防止对正在被其他处理修改的数据执行写锁定; transaction-read-uncommitted:允许处理读入未受权的数据以及允许在向结果中添加记录时可以忽略处理。 以上隔离水平依次降低,效率
44、和性能依次提高。因此,建议选用满足在业务数据完整性要求前提下水平最低的隔离级别。对于事务属性的设置也是如此,对于删除、修改和插入操作设置为required,而对于只读操作设置为supports或者notsupports。2.6.3 其他一些小技巧1. 利用finders-load-bean的默认值true,既可以避免“n+1”的查询问题,又可以提高系统的性能;2. 使用delay-updates-until-end-of-tx参数的默认值true,除非应用程序对某些变化有特别的要求;3. 应用程序在每个业务方法调用后不需要进行存在性检查,将check-exists-on-method设定为fa
45、lse,以提高程序的性能;4. 同一应用内, 将enable-call-by-reference设置为 true;5. reentrant设置为false,避免事先加载子数据。第三章 数据库调优3.1.1 oracle性能优化oracle9i的性能优化除了调整kernal之外就是主要对oracle启动文件的调整,即调整sga的参数。注意,不同操作系统不同位数的机器最优的参数不是一样的,这里主要有windows和unix之分,32位和64位之分。首先需要调大进程数和游标数,一般默认的值对实际应用来说都比较小,比如说,进程数可以调到300,游标数可以调到500。其次,看一个经验公式: os 使用内
46、存+ sga + session*(sort_area_size + hash_area_size +2m)<0.7ram,通常认为此时的sga比较合理。这里sort_area_size为64k, hash_area_size为128k(当排序多的时候需要增大sort_area_size,按调整后的值计算),session表示最大并发进程数,假设100个。假如1g内存的机器,os占用200m,pga占用200m左右,那么sga可以设为400-500m,如果2g内存可以1g给 sga,8g可以5g给sga。不过对于32位数据库来说,通常最多只能使用1.7g内存。然后,sga内参数设置的基本
47、原则是: data buffer 通常可以尽可能的大,shared_pool_size 要适度,log_buffer 通常大到几百k到1m就差不多。具体的:data buffer 1g内存可以设置500m,2g设为1.2g,8g可设为5g 。shared_pool_size不易过大,通常应该控制在200m-300m,如果使用了大量的存储过程,可以根据sga的值增大到500m,如果增大后命中率得不到提高,则增加是无益的。具体的:1g内存可以设置100m,2g设为150m,8g可设为300m。如不使用java, java_pool_size 10-20m即可。large_pool_size如果不设
48、置mts,在20m -30m 即可,假如设置 mts,可以考虑为 session * (sort_area_size + 2m)。最后,关于内存的设置可根据statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息来考虑微调。传播优秀word版文档 ,希望对您有帮助,可双击去除!3.1.2 oracle的其他调整为了oracle高效率的运行,除了上面提到的内存因素之外,还有就是需要良好的数据库设计:表、视图、索引和日志的合理规划和建立。i/o的性能也是重要因素,应尽量减少页交换和页分配。此外,就是改善检查点的效率。第四章 操作系
49、统调优4.1 操作系统调整操作系统影响应用程序运行性能的因素主要有:硬件的配置(cpu、内存、硬盘等),核心参数,tcp/ip参数以及补丁的情况等。这里对操作系统的优化,除了更新最新的补丁程序以保证应用程序正常运行之外,就是调整tcp/ip参数,文件描述符,对于个别操作系统还有其他特别的参数调整。下面将依次介绍不同操作系统的情况,更多的信息请参考各操作系统的文档。4.1.1 hp-ux对于hp-ux,你首先需要安装java patch:调整tcp参数: ndd -set /dev/tcp tcp_conn_req_max 1024, 将侦听队列的最大允许长度调整到1024。 有时操作系统限制进
50、程使用的最大内存数小于你要配置的内存大小,则需要调整该值。读者可以从传播优秀word版文档 ,希望对您有帮助,可双击去除!4.1.2 solaris调整tcp的参数,等待时间间隔tcp-time-wait-interval建议设置为60000ms: /usr/sbin/ndd ?set /dev/tcp tcp_time_wait_interval 60000;其他参数调整如下:tcp_xmit_hiwat/tcp_recv_hiwat 131072tcp_conn_req_max_q/tcp_conn_req_max_q0 16384调整一个进程打开的文件描述符的数量:软限制和硬限制以及散列
51、表的大小,修改/etc/system文件:set tcp:tcp_conn_hash_size=32768set rlim_fd_cur=8192set rlim_fd_max=8192更多的调整信息请查阅: 4.1.3 aixaix用no命令调整tcp参数,等待时间间隔tcp_timewait: no -o tcp_timewait=4,将tcp.timewait参数设置为4个15秒间隔,即1分钟。运行no -a命令将显示网络当前的所有属性值。由于udp_sendspace默认的缓存大小是8k,为减少i/o异常,需调整为32k:no -o udp_sendspace=32768。此外, 当w
52、eblogic http请求忙时,可以调整侦听队列的最大长somaxconn到8192(默认值是1024)。更多信息:4.1.4 linux调整linux系统使用sysctl命令修改tcp参数等待时间间隔:sysctl -w ip_ct_tcp_timeout_time_wait=60;调整打开文件的最大数:在/etc/sysctl.conf文件中,添加: fs.file-max=65535,然后运行sysctl -p;调整打开文件描述符最大数为8192:在/etc/security/limits.conf文件,添加:weblogic hard nofile 8192(仅针对weblogic用
53、户),然后在weblogic启动文件里运行ulimit-n 8192激活设置。更多信息请查阅:http:/ipsysctl-4.1.5 windowswindows系统的调整通过修改注册表hkey-local-machinesystemcurrent controlsetservices文件夹来完成。可以调整tcpipparameters子文件夹中的等待时间间隔时间 tcptimedwaitdelay参数的值。侦听队列最大长度的默认值为15,为修改它,可在inetinfoparameters子目录中创建 dword条目listenbacklog。此外,windows2000的service p
54、ack(要求sp3以上)也会影响系统稳定性: 传播优秀word版文档 ,希望对您有帮助,可双击去除!http:/e-第五章 性能监控和性能分析5.1 性能瓶颈最后,介绍一下实际分析j2ee应用性能的常用命令和工具。对于实现一个高性能的j2ee应用来说,掌握了j2ee调优的理论经验还是不够的。掌握性能监控,发现瓶颈和问题诊断才是保证j2ee系统持续高效运行的关键。瓶颈指的是限值所有吞吐操作以及严重影响反应时间的系统内资源。在分布式系统内寻找并纠正瓶颈是非常困难的,需要有经验的团队来解决。瓶颈会发生在web 服务器上,程序代码中,应用服务器上,数据库,操作系统或者网络,硬件上。经验表明,瓶颈很容易发生在如下地方:数据库连接与队列中;应用服务器的程序代码中;应用服务器和web服务器硬件上;网络和tcp配置中。实际中可以着力对这些环节进行监控。5.2 操作系统监控操作系统层面的性能监控主要是对内存、cpu、i/o和交换区的使用情况进行监控分析。windows平台可以通过任务管理器和perfmon工具查看。如果是unix系统可以使用stat系列命令(vmstat, mpstat, iostat)监控内存、cpu和i/o的即时变化,使用swa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《2025智能设备采购委托项目管理合同》
- 2025合同范本食品供应合同
- 2025年委托借款合同模板
- 2025便利店店面转让合同范本
- 2025标准化的苗木购销合同
- 2025版商品房购买合同范本
- 2025年上海市农产品买卖合同示范文本
- 《年级魅力》课件
- 2025授权合同范本(标准)
- 《金融市场概述》课件
- 2025年陕西省普通高中学业水平合格考试模拟卷(五)历史试题(含答案)
- 2025年有关“我为群众办实事”主题日活动工作方案
- 油气管道输送试题及答案
- 铁路雨季三防培训课件
- 2025-2030中国非邻苯二甲酸酯类增塑剂行业市场发展趋势与前景展望战略研究报告
- 2025年台球理论测试题及答案
- 虚拟电厂接入配电网电力系统调度优化
- 用户能耗监测的智能插座原型设计
- 新能源汽车废旧动力电池综合利用行业规范条件(2024年本)
- 分子生物学知到智慧树章节测试课后答案2024年秋上海海洋大学
- 【MOOC】粮油储藏学(A)-河南工业大学 中国大学慕课MOOC答案
评论
0/150
提交评论