??xml version="1.0" encoding="utf-8" standalone="yes"?>
css模板?Q?a >http://tools.i-use.it/index.aspx
css模板?Q?a >http://www.intensivstation.ch/en/templates/
css例子 http://qjjerry.bokee.com/5236112.html
]]>
]]>
注:在下面做的介l都是以Weblogic8.1Z的,其它版本?/span>Weblogic可能会有些许不同?span lang="EN-US">
1) 讄JAVA参数Q?span lang="EN-US">
a) ~辑Weblogic Server启动脚本文gQ?span lang="EN-US">
BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh
on Unix)
BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh
on Unix)
b) ~辑set JAVA_OPTIONS命oQ如Q?/span>set JAVA_OPTIONS=-Xms256m –Xmx256mQ?span lang="EN-US">
c) 保存Q重启即可?span lang="EN-US">
注:?/span>WebLogic中,Z获得更好的性能Q?/span>BEA公司推荐最?/span>Java堆等于最?/span>Java堆?/span>
2) 开发模?/span> vs. 产品模式Q?span lang="EN-US">
开发模式和产品模式的一些参数的默认g同,可能会对性能造成影响Q下面是Ҏ能有媄响的参数列表Q?span lang="EN-US">
参数 |
开发模式默认?span lang="EN-US"> |
产品模式默认?span lang="EN-US"> |
Execute Queue: Thread Count |
15 threads |
25 threads |
JDBC Connection Pool: MaxCapacity |
15 connnections |
25 connections |
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 配置 > 常规选择产品模式?span lang="EN-US">
3) 量开启本?/span>I/OQ?span lang="EN-US">
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>> 配置 > 调整选择启用本地I/O?span lang="EN-US">
注:此g可通过手动的修?/span>config.xml配置文g?/span>
4) 调优执行队列U程Q?span lang="EN-US">
a) 修改默认执行U程?span lang="EN-US">
在这里,执行队列的线E数表示执行队列能够同时执行的操作的数量。但此g是设的越大越好,应该恰到好处的去讄它,太小了,执行队列中将会积累很多待处理的Q务,太大了,则会消耗大量的pȝ资源从而媄响整体的性能。在产品模式下默认ؓ25个执行线E?span lang="EN-US">
Z讄理想的执行队列的U程敎ͼ我们可以启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>> 监视 > 性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数Q据此确定理想的数倹{?span lang="EN-US">
理想的默认执行线E数是由多方面的因素军_的,比如机器CPU性能、M体系架构?/span>I/O、操作系l的q程调度机制?/span>JVM的线E调度机制。随着CPU个数的增加,WebLogic可以q乎U性地提高U程数。线E数多Q花费在U程切换的时间也p多;U程数越,CPU可能无法得到充分的利用。ؓ获取一个理想的U程敎ͼ需要经q反复的试。在试中,可以?/span>25*CPU个数为基准进行调整。当I闲U程较少Q?/span>CPU利用率较低时Q可以适当增加U程数的大小Q每五个递增Q。对?/span>PC Server?/span>Windows 2000Q则最好每?/span>CPU于50个线E,?/span>CPU利用率ؓ90%左右为最佟?span lang="EN-US">
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>> Execute Queue >
weblogic.kernel.Defalt > 配置中修改线E计数?span lang="EN-US">
b) 讑֮执行队列的溢出条Ӟ
Weblogic Server提供l默认的执行队列或用戯定义的执行队列自定义溢出条g的功能,当满x溢出条gӞ服务器改变其状态ؓ“警告”状态,q且额外的再分配一些线E去处理在队列中的请求,而达到降低队列长度的目的?span lang="EN-US">
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>> Execute Queue >
weblogic.kernel.Defalt > 配置下面几项Q?span lang="EN-US">
队列长度Q此DC执行队列中可容U的最大请求数Q默认值是65536Q最后不要手动改变此倹{?span lang="EN-US">
队列长度阈值百分比Q此DC溢出条Ӟ在此服务器指出队列溢Z前可以达到的队列长度大小的百分比?span lang="EN-US">
U程数增加:当检到溢出条gӞ增加到执行队列中的U程数量。如?/span>CPU和内存不是够的高,量不要改变默认值?/span>0”。因?/span>Weblogic一旦增加后不会自动~减Q虽然最l可能确实vC降低h的作用,但在来的运行中媄响程序的性能?span lang="EN-US">
最大线E数Qؓ了防止创多的U程数量Q可以通过讑֮最大的U程数进行控制?span lang="EN-US">
在实际的应用场景中,应根据具体情况适当的调整以上参数?span lang="EN-US">
c) 讑֮执行队列监测行ؓ
Weblogic Server能够自动监测到当一个执行线E变为“阻塞”。变为“阻塞”状态的执行U程无法完成当前的工作Q也无法再执行新h。如果执行队列中的所有执行线E都变ؓ“阻塞”状态,Weblogic server可能改变状态ؓ“警告”或“严重”状态。如?/span>Weblogic server变ؓ“严重”状态,可以通过Node Manager来自动关闭此服务器ƈ重新启动它。具体请参考:Node Manager Capabilities文档?/span>
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>>配置 > 调整下可配置下面几项Q?span lang="EN-US">
dU程最长时_在此服务器将U程诊断为阻塞线E之前,U程必须q箋工作的时间长?/span>(U?/span>)。默认情况下Q?/span>WebLogic Server 认ؓU程在连l工?/span> 600 U后成ؓdU程?span lang="EN-US">
dU程计时器间隔:WebLogic Server
定期扫描U程以查看它们是否已l连l工作了 "dU程最长时?/span>" 字段中指定的旉长度的间隔时?/span>(U?/span>)。默认情况下Q?/span>WebLogic Server 此旉间隔讄?/span> 600 U?span lang="EN-US">
5) 调优TCPq接~存敎ͼ
WebLogic Server?/span>Accept Backlog参数规定服务器向操作pȝh的队列大,默认gؓ50。当pȝ重蝲负荷?/span>,q个值可能过?/span>,日志中报Connection Refused,D有效q接h遭到拒绝,此时可以提高Accept Backlog 25%直到q接拒绝错误消失。对?/span>Portalcd的应?/span>,默认值往往是不够的?/span>Login Timeout?/span>SSL Login Timeout参数表示普通连接和SSLq接的超时时?/span>,如果客户q接被服务器中断或?/span>SSL定w?/span>,可以试增加该倹{?span lang="EN-US">
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>>配置 > 调整下可配置“接受预备连接”?span lang="EN-US">
6) 改变Java~译器;
标准?/span>Java~译器是javacQ但~译JSP servlets速度太慢Qؓ了提高编译速度Q可以?/span>sj?/span>jikes~译器取?/span>javac~译器。下面说说更?/span>Java~译器:
通过启动理控制収ͼ在域Q如Q?/span>mydomainQ?/span>> 服务?/span> > server实例Q如Q?/span>myserverQ?/span>>配置 > 常规下改?/span>Java ~译?/span>Q默认ؓjavac。输入完整\径,如:c:\visualcafe31\bin\sj.exe。然后打开高选项Q在预规划到c\径填?/span>~译 Java 代码时ؓ Java ~译器类路径预规划的选项Q如Q?/span>BEA_HOME\jdk141_02\jre\lib\rt.jar?span lang="EN-US">
7) 使用Webogic Server集群提高性能Q?span lang="EN-US">
具体关于如何配置Weblogic集群Q我׃l说了。详情可参考:Introduction to WebLogic Server Clustering?span lang="EN-US">
8)
Weblogic EJB调优
׃EJB2.0已经很少目在用了,EJB3.0再成熟一点,我再补充q一部分吧!
9) JDBC应用调优
JDBC Connection
Pool的调优受制于WebLogic ServerU程数的讄和数据库q程?/span>,游标的大。通常我们在一个线E中使用一个连?/span>,所以连接数q不是越多越?/span>,为避免两边的资源消耗,讄q接池的最大值等于或者略于U程数。同时ؓ了减新接的开销,最值和最大DZ致?span lang="EN-US">
增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮?/span>,WebLogic能够为每一个连接缓存这些对?/span>,此值默认ؓ10。在保证数据库游标大够的前提?/span>,可以Ҏ需要提?/span>Statement Cache
Size。比如当你设|连接数?/span>25,Cache
Size?/span>10?/span>,数据库可能需要打开25*10=250个游标。不q的?/span>,当遇CPreparedStatement Cache有关的应用程序错误时,你需要将Cache Size讄?/span>0?span lang="EN-US">
管JDBC Connection Pool提供了很多高U参?/span>,在开发模式下比较有用,但大部分在生产环境下不需调整。这里徏议最好不要设|测试表, 同时Test Reserved Connections?/span>Test Released Connections也无需勾上?/span> 当然如果你的数据库不E_,时断时箋,你就可能需要上q的参数打开?span lang="EN-US">
最后提一下驱动程序类型的选择,?/span>OracleZ,Oracle提供thin驱动?/span>oci驱动,从性能上来?/span>,oci驱动Zthin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改q?/span>,q一弱势得到I补。?/span>thin驱动的移植性明昑ּ?/span>oci驱动。所以在通常情况下徏议?/span>thin驱动。而最新驱动器׃WebLogic server/bin目录下的cd可能不是最新的,请以Oracle|站为准: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html?o:p>
10) JSP调优
讄jsp-param pageCheckSeconds=-1Q?span lang="EN-US">
讄serlet-reload-check=-1?/span>ServletReloadCheckSecs=-1Q?span lang="EN-US">
讄jsp-param precompile=trueQ关?/span>JSP预编译选项?span lang="EN-US">
U别: 初 |
总裁, J2Life, LLC
2005 q?5 ?30 ?/P>
轻量U开发是一个很大的主题Q开发h员经常提到这个术语,但却很难讲明它的意思。本文是一pd讲述轻量U开发的文章中的首篇Q介l了该技术背后的核心原则及原理?/BLOCKQUOTE>1990 q_我发C白水漂流q深q上了它。我们哪怕是l过最的湍流Q都会留一个h在湍尾部,两个人在岸边用索拽着。我们认可以防止Mp糕的事情发生。虽然看h一切尽在掌握,只是有些不太实际。我们还学会了从船舱观察普通的湍流Qƈ设法互相协作。对于大多数危险的湍,我们p了更多的旉来保障安全,但是只有数情况下,q些措施才v到重大的作用?/P>
在漂过E中Q用一Uv源于东南部湍急河的轻量U策略,为我节省了时_使我可以划得更远Q玩得更开心,而无需q多考虑安全问题。在业务领域Q轻量开发让您可以按时完工,U极响应客户Q从而节省时间和金钱?/P>
在本pd的文章中Q我x于轻量开发(曄有太多含义的术语Q的基础。本文章作为第一,者打好基Q同时对轻量U开发做出定义。后面的文章由浅入深地讲qCq程到原则最后到工具的知识。我也将在更高的U别上关注原理和架构的实玎ͼq且提供具体实现的代码?/P>
本系列面向没有经q太多轻量开发的读者。如果您已用了两年?Spring 轻量U容器和敏捷q程Q您可能会收h多。如果您在传l的开发过E中使用 Enterprise JavaBeans™(EJBQ,但想要{向轻量开发,那么本系列就是ؓ您准备的?/P>
我更多地是想在这场席h?Java?技术社区的潮流中,做一些自q贡献?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">轻量U?/I> q个噱头?Spring ?Pico q样的容器增M几分优雅。ƈ且,一些源自轻量q程的技术,如自动化单元试Q现在也渗透到了很多开发工作室中?/P>
戳穿针对轻量U开发的谣言
“轻量开发”通常与一套开发方法、框架和设计原理一起用?/P>
- 轻量U?I>Ҏ 包括敏捷q程Q例?I>极限~程QXPQ和 Scrum。它们强调开发中试W一Q积极调动客户和重构?
- 轻量U?I>框架 鼓励Z使用单原始的 Java 对象QPOJOQ编E,而不是类?EJB 的重量面向lg模型?
- 轻量U?I>设计模式 使您可以在对象和集成服务之间q行松散耦合Q而无需艰苦地编写业务逻辑或领域模型?/LI>
当我们研I这些思想和技术时Q您会学到更多关于它们的知识。但是首先让我们戳穿一些谣a?/P>
谣言Q轻量开发只是一U“玩具”技术?/SPAN>
许多开发工P?Microsoft] Visual Basic ?PHPQ它们通常不能N或管理大型企业项目,因此得到?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">“玩具?/I>的称受像 Spring ?Hebernate q样的轻量技术就常常因此而黯淡。实际上Q大多数轻量U技术用于了企业开发,因ؓ其他技术都使我们非常失望。Spring 框架是作ؓ代替 EJB 的一U轻量技术。同PXP Ҏ吸收改进了企业中的错误设|。我在获?Jolt 大奖?Better, Faster, Lighter Java 一书中Qؓ大家讲述了有x功部|在我的客户站点上的一些工L信息Q客h一些是财富 500 Z的公司。轻量技术在企业领域内,正在蓬勃发展着?/P>谣言Q轻量开发策略构建的是“玩具”?/SPAN>
也许您更們于相信轻量开发只Ҏ建“玩具”应用程序有益。而您的目标是_地满_L需求。让我们首先明确一下:轻量U技术完全可以构U规模的应用E序。实际上Q这U巨大的反差l常发生Q因为只有简单、简z、无状态的设计才能使基设施更好地工作?/P>谣言Q轻量q程使您忽视规范?/SPAN>
在轻量开发中Q您需要认真地规划q与客户商需求。您必须构徏严格的自动化单元试Q以优化重构。当攑ּ变更Ӟ仍可以保持程序完整。而且Q测试用例失败或变更引发错误Ӟ自动化构Z通知您。轻量开发必L其他技术更加注意规范,但这U规范源于不同方面?/P>我认U开发风D了单一的技术或q程。如果您惌松一些,那么需要选择使它易于工作的原则、过E和技术?/P>
原则
该说的也说了Q该做的也做了,您现在需要决定哪些需要重视,q据此制定决{。如果我觉得客户被误导或漠不兛_Q我通常会首先帮助他们徏立核心原则。下面的列表是一个不错的LQ?
- 争取单?/B>。这U观念应该渗入到您所有的工作中。您的过E应该刚好生成够完成工作的工g。开发h员应该尽量用最单的Ҏ解决问题。您的工具应该您构Z个清晰、简z的解决Ҏ?
- 修补漏洞。许多开发方法可能不鼓励在过E中q行重构或变_因ؓq些行ؓ不直接用于生客户代码。轻量开发要求可以自由地修补太复杂或充斥 bug 的代码。您需要ؓ它做出预?
- 自动化单元测?/B>。您应该优先~写试用例。您可能q没有在试W一的开发中成功q,但测试会间接l您带来重构代码的便利。我以后会进一步讲qͼq泛的单元测试改善您的客户体验,q提高代码的设计水^Q这是因为它您解耦联p过于紧密的代码?
- 使用短开发周期ƈU极调动客户参与其中。许多顶U的软g工作室通过剔除不必要的工g来简化开发周期。如果您已经利得到客户的参与,那么很多的功能规范会变得来没必要。客户会很满意这U交互,q感Ȁ您的短周期开发,因ؓq稳步提高了客户的业务h倹{?/LI>
q些原则q不能完全包含您的技术抉择和开发过E,但它有利于您描述开发体验。如果经理也了解q循这些原则,开发h员就不至于做出无效技术选择Q或者开发一些不必要的工件。确立原则后Q就该规划一个有效过E了?/P>
q程
紧凑、快速的开发过E通常?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">敏捷开发方?/I> 当中得到灉|。然而,q些Ҏq不针对每个人。如果您有一个大型团队,q且没有实际讉K客户或合适的代理人,那么传统Ҏ更适合您一些。但多数目都有团?—?不超q?12 个hQ他们可以充分访问客P以灵zM用这U方法。通常Q敏捷开发包括下列原则:
- 专注现场客户和代码,而不是其他设计技巧。您可以使用其他技巧,但只在它们对您确实有益的情况下。本q程不需要它?
- 化您需要的文档。ؓ了需要,宁可使用电子表格中的一行来描述Q也不用o人困惑的用例图?
- 只做以完成工作的设计工作。不要对设计或性能q分忧心忡忡Q自己陷入l境?
- Z开发,努力q行化ƈ保证臛_每天都集成您所构徏的程序,必要时进行重构?
- 自动化测试?/LI>
即您工作在传统的机构,您也可以利用已裁减的开发过E。技巧是推广原则 而不?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Ҏ。推q极限编E管理器 —?或其他冠?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">极限 的东西,q可能会很艰难。但推广cM单元试的原则通常更有意义。实际上Q我的许多客户用这U技术同敏捷开发过E一起ؓ保守的机构服务,但他们的老板丝毫不知道有什么发生了改变?/P>
用修辞手法描qC下这U技术?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">原则 是重招_ȝ轻量U思想?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">q程是重量的,实现h会很困难?/P>
技?/SPAN>
我已l概qC大多数轻量开发h员需要了解的设计原理Q以及利用这些原理的重要开源技术?/P>依赖注入
清单 1. 创徏一个第三方汇编E序
最C代容器称?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">轻量U容?/I>Q它们用一个共同设计原理:依赖注入?对这个简单思想来说Q这是一个复杂的术语。依赖注入让您将对象和它所依赖的东西交l第三方。然后第三方创徏所有对象ƈ它们绑在一赗比方说Q称?myDao
的数据访问对象需要一个称?ds
的数据源。那么该容器会一同创建它们,q设|一个属性:
myDao = new Dao(); ds = new DataSource(); myDao.setDataSource(ds);
当然Q不创徏q种W三Ҏ~程序的话,您也可以使用框架来做其他附加的工作(如提供配|支持)。Spring 框架、Pico ?HiveMind 扮演了q个角色。其他像 JavaServer Faces(JSF) 框架也利用了依赖注入?/P>
面向对象~程
使用面向对象~程QAOPQ,您可以编写通用的功能性模块(UCؓ斚wQ?—?例如Q日志、事务、安全或持久性。AOP 使您可以这些方面联pd POJOQ然后指定一个时间点Q如Ҏ开始时或生异常时Q和另一个需要联pȝ斚w。例如,您可能想要创Z个外观事务对象。您可以在调用方法时?TransactionBegin
斚w兌到外观方法。然后在产生异常时将RollBack
斚w兌到外观的异常。最后,在方法结束时?Commit
斚w兌到外观的Ҏ。您在配|中完成q些工作Q而不是通过~写代码。依靠这U能力,您可以创Z个简单的 POJO 事务、安全或q程讉K?/P>您现在已l得C关于 POJO 的声明性事务,q对企业应用E序非常有用。用这些工P您可以完全放?EJBQ或者最化它的作用。而这正是轻量U组件所要做的?/P>
透明持久?/SPAN>
持久性也是徏立在较简单的~程模型之上。透明持久性框枉过配置而不是编写代码,来您ؓ应用E序d持久性。因为大多数应用E序是面向对象的Qƈ且访问一个关pL据库Q所以一些专家断aQ我们最l将q入对象关系映射的时代。我目前发现的顶U持久性解x案是 SolarMetric ?Kodo JDO ?HibernateQ参?参考资?/A>Q。在后面的文章中我将详细比较q些解决Ҏ。其他轻量解决ҎQ例?iBATIS ?Active Record 设计模式Q根本不会试图进行对象关pL?/P>l束?/SPAN>
在轻量开发中Q您基本上可以:
- 合ƈq程、技术和原理?
- 优先选择较简单的技术?
- 在一个稳固、轻量的基上,q行构徏?
- 量争取最可能的透明性?
- 使用您可以利用的技术,如依赖注入和 AOP?/LI>
一定要明白Q无论技术还是过E都不能完整定义轻量U开发。它是一个包|万象的概念。伴随本pd的文章,您将看到对轻量技术和原理的各U各L讨论。我首先关注开源框Ӟq着重讲q轻量容器。后面的文章Q我会讨Z守公司内的轻量Ҏ实现Q甚臌有一些超了 Java 技术的替代Ҏ。我非常喜欢q个pd的文章,希望您也一栗?/P>
”,它是提供更佳透明性的轻量U技术?BR>
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文?BR>
- 阅读 Bruce Tate ?Justin Gehtland ~写?Better, Faster, Lighter Java 一书,此书更好地概qC轻量U开发?BR>
- Bruce Tate ?Justin Gehtland ~写?Spring: A Developer's Notebook 一书可以帮您快速入?Spring?BR>
- 想了解更全面?Spring 知识Q请阅读 Rob Harrop ?Jan Machacek ~写?Pro SpringQ以?Craig Walls ?Ryan Breidenbach ~写?Spring in Action?BR>
- developerWorks 题ؓ?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">无需容器的对象关pL?/A>”的文章为您展示了如何与 Hibernate 一起?Spring 持久性?BR>
- 阅读 developerWorks 关于 AOP 的一文章?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">AOP@Work: AOP 工具比较Q第 1 部分
讉K developerWorks 的开源专?/A> 获取大量 how-to 信息、工具和目更新Q以帮助您用开源技术进行开发,q学会如何与 IBM 产品一起用?BR> 使用 IBM 试用软g 改进您的下一个开源开发项目,q些软g可以通过下蝲或购?DVD 获得?BR> ?Developer Bookstore 的开源专区,可以扑ֈ数百?开源主题的打折书籍?BR> 通过参与 developerWorks blog 加入 developerWorks C?BR>
]]>