Rational Application Developer性能调优指南

11 篇文章 0 订阅

作者: Gary Karasiuk
翻译和整理: Steven Su, 伍鑫, 金发华

关于本文

本文针对在使用Rational Application Developer(RAD)中所遇到的性能问题提出了优化建议,本文更新了2006年3月发布的一篇文章。文中截图为Rational Application Developer 7.5.4版本。本文适用于RAD系列软件产品,包括Rational许多基于RAD的软件产品。如Rational Business Developer(RBD)等。


概要


下表总结了本文所有性能调优技巧,并分析了何时适用每条技巧以及技巧提升了何种性能。
▪ 适用性 – 技巧的重要性以及适用情况的多少
▪ 调优属性 – 表明此技巧所能提升的属性,RAD操作速度或是内存使用率。注意,如果机器性能较差,降低RAD内存使用率同时也会加快操作速度。
▪ 首选项(Preference) – 表明此技巧是否在Windows → 首选项(Preference)中进行配置

 

一、首选项调优技巧

    RAD在菜单“窗口(Windows)” → “首选项(Preferences)”中有许多选项可以通过调整来提升性能。本章我们将主要对其中的选项进行详细的介绍。

自动刷新和自动构建


        通常情况下,自动构建应该在开启状态,RAD将会在有代码改动时自动进行增量构建。包括构建(或者编译)所有依赖的文件。自动构建同样会运行相关验证操作。通常这些操作都很快;如果在保存文件时发现构建时间较长,可以考虑关闭自动构建,在进行一系列的代码修改后然后一次构建所有变更。但这样将不能及时的看到代码错误。通常,是否选择自动构建取决于用户习惯。
        如果将自动构建取消,你需要时常进行构建操作(Ctrl + B)。这将会构建所有改动项以及所依赖的项。这同样是增量构建,只不过增量较大且用户可以决定何时构建。
        自动刷新会查看是否有外部进程改变了工作区内的文件,我建议把自动刷新功能关闭。

[具体操作] 

        在RAD菜单窗口 → 首选项 → 常规 → 工作空间

 


去除RAD 中不必要的功能

        用户可以控制哪些功能将被启用。一些不相关的功能可以关闭以提高RAD 在启动和运行时的效率。RAD采用的是慢加载模式,当你调用某些新功能时,该功能才会被载入并加载。这些不必要的功能将会在不可预期的时间增加内存消耗。
        如果某些功能是不必要的,关闭它们将会避免不必要的性能损失。
[具体操作]
       在RAD菜单窗口 → 首选项 → 常规 → 功能(Capbilities)




关闭快速差异显示

        快速差异一个在编辑器左边显示文件是否经过改动的功能。关闭这个功能可以略微提高性能。
        在RAD菜单窗口 → 首选项 → 常规 → 编辑器 → 文件编辑器 → 快速差异显示



去除标签装饰

        取消所有或者某些标签装饰选项将会轻微的提升RAD性能。
[具体操作]
        在RAD菜单窗口 → 首选项 → 常规 → 外观 → 标签装饰




取消链接索引

        链接索引将会监控超链接。如果你的工作空间中有很多HTML或者JSP文件,那么这些超链接都会被RAD监控。取消某些链接索引将会提升RAD性能。但是不建议用户取消链接索引过程,因为许多功能需要通过这个索引过程来获取准确的链接信息(例如重构)。
[具体操作]
        在RAD菜单窗口 → 首选项 → Web项目 → 链接

      如果需要取消所有链接索引操作,你可以增加一个新的资源忽略项,匹配模式为*。



快速启动

        下图所示的选项表明哪些插件将会在RAD启动时自动被加载。我不建议取消其中任何一个插件。但是如果你有一个很大的工作空间,而工作空间中的所有项目都已经被迁移到最新版本。这时如果你想进一步提升启动速度,可以考虑取消IBM© Common Migration UI这个插件。因为这个插件在启动时将会自动加载并检查绝大多数文件来确定是否有文件需要迁移到新版本。





去除不必要的检验

        这是一个很重要的技巧。启动所有检验机制将很明显成为降低性能的操作。如果你发现你的项目构建过程非常耗时,那么可以考虑关闭所有或其中一些检验措施。当某一个检验机制被关闭,你将不再会得到这个检验器所提供的错误,警告或者信息提示等好处。一个快速禁止所有验证的方法是选择挂起所有检验器。另外一种可行的解决方法是在进行项目构建时取消所有检验,但保留手动检验模式,并且每隔一段时间手动进行检验。RAD7.5增加了许多检验控制选项,你可以浏览这些选项来更加熟悉他们。
另外需要注意:
▪ JSP编译检验器将会降低性能。
▪ 当XML检验器引用了扩展服务器中的DTD或者XML schema文件将会降低性能。
        速度较慢的扩展服务器将会降低检验速度,最终导致构建变慢。一个可行的方法是将远程的DTD或者schema文件转存到本地,并将XML中的引用改写成引用本地资源。





二、其他RAD性能调优技巧

使用 Binary Projects


        随着应用及项目数量不断增多,维护整个工作空间在源文件模式将会使性能变差。例如,你有一个很大的工作空间,你将不会经常更改所有项目。这种情况下可以将经常变动的项目维持在源文件模式,而不常改变的项目可以转换为Binary模式。
[具体操作]
请参考 IBM 相关技术文档



关闭不必要项目

        通常我们不应该在工作空间中保存不需要的项目。这些项目将会在构建,检验和索引等操作中消耗额外的资源并降低整体性能。你需要关闭或者删除这些不需要的项目。创建多个工作空间,将相关项目放在同一个工作空间内,这将比所有项目放在一起要好得多。




定期整理磁盘

        RAD是一个很大的产品,为了加快启动时间,不妨在安装完RAD后进行磁盘碎片整理。安装前进行磁盘整理可以达到相同的效果。请定期整理系统盘,RAD 安装所在的磁盘以及Wrokspace 所在的磁盘。由于磁盘整理需要较多时间,我们建议您在工作空闲时间进行。



仅安装必须功能

        为了方便,许多人在安装RAD时会默认选择安装所有功能。我建议在安装时只安装应用开发过程中必须的功能,或者卸载已经安装的不必要功能。RAD对插件采用慢加载模式,从而不会加载不需要激活的插件。 但是被安装的插件即使不需要被加载激活,同样有需要消耗某些资源(如内存)。所以我们推荐仅安装必须的功能。



保持干净的工作空间

        时常创建全新的工作空间并将原有代码重新导入将可能提升RAD性能。如果你的代码是放在源码管理系统里,这将会变得异常简单。而这也是我们推荐的开发模式。过期的元数据文件将在工作空间下的.metadata文件夹中不断积累并影响RAD的性能。你可以通过删除.metadata文件夹来清理过期的元数据,从而提高RAD性能。
        创建一个全新的工作空间一般有如下步骤:
1. 确定所有文件已经被提交到源码管理系统里。
2. 将所有项目进行打包操作并导出。
3. 导出首选项配置。
4. 关闭Rational Application Developer。
5. 删除工作空间文件夹。
6. 启动Rational Application Developer。
7. 导入首选项配置。
8. 导入打包好的所有工作项目。

请注意:有很多信息并不是保存在源代码管理系统中的,比如首选项、自定义的键盘快捷键、过滤器、工作集定义(workingset),断点,VM设置、代码模板、编辑器设置、标签、CVS代码库地址等。如果你设置了提到的这些东西,可能清理工作空间就不是特别好了。


通过任务管理器监控RAD

        任务管理器可以帮助你分析性能问题是内存问题还是处理器导致的。如果是内存问题,任务管理器还可以分辨出是哪个进程占用过多内存。

        在进程标签,对内存使用率进行排序可以看到是哪些进程占用最多的物理内存。RAD的进程名称是javaw.exe。注意是javaw而不是java。在任务管理器的最下方显示了提交更改内存数。如果提交更改的内存数大于你机器的物理内存数,那么你的系统已经超负荷运转。在这种情况下应该关闭一些程序来降低内存更改数量或者为机器增加物理内存来改善系统性能。内存是一个需要调节平衡的资源,任务管理器将会显示你的内存被分配到哪些进程上。
        同样,你可以在RAD首选项 → 常规 中勾选查看内存状况选项,从而为RAD增加内存监控控件。


        这个选项在选中后,将会在状态栏增加一个内存指示器。如上图所示,并显示已使用内存大小(63M)和当前堆大小(175M)。


远程测试服务器

        如果你的机器性能不足以同时支持RAD,WebSphere测试服务器,甚至数据库管理工具。可以考虑将服务器部署在远程机器上。这样可以缓解本机资源紧张带来的性能下降。详细设置可以参考 Setting up a Remote WebSphere Test Server for Multiple Developers 这篇文章是为了WebSphere Studio Application Developer 编写,但是同样适用于RAD 和WebSphere测试服务器。
        在RAD以外同时运行多个本地测试服务器将会极大地消耗系统内存。所以我们推荐最多在本地运行一个测试服务器。



重启RAD

        当你使用更多的功能,将会有更多的类被加载到内存中。RAD采用慢加载模式,也就是说某一个功能的代码只有当功能被用到的时候才会被加载到内存当中。比方说,如果你之前没有用到XML编辑器,那么只有当你用到XML编辑器的时候相关代码才会被加载。并且被加载的代码所占用的内存不会被释放,也就是说只有重新启动RAD才能释放这些内存。所以我们建议每天至少重启一次RAD。



JVM参数调整

        有许多文章都介绍了如何对JVM参数进行调整。-Xmx是其中经常提及的一个参数。这个参数是用来控制Java虚拟机堆中可以分配的最大内存数。RAD默认最大内存数是1GB。设置成这个默认值是为了RAD可以支持较大的和复杂的工作空间。你可以降低这个默认值来使RAD内存消耗的可能性变小,但是不推荐将数值设置小于 -Xmx512M 。

注意:如果将-Xmx 设置的过小将会使RAD出现内存溢出问题。

        同时,你还可以通过设置-Xmaxf和-Xminf这两个参数来控制空闲内存的增长。默认值被
设置为:
▪ -Xmaxf0.6
▪ -Xminf0.3
        参数中的数值为百分数。-Xmaxf0.6说明JVM将会在空闲内存超过60%的时候对内存进行压缩。将这个值降低可以在内存回收压力增大的时候降低内存堆的大小。例如,将-Xmaxf设置为0.3可以使内存在空闲率超过40%的时候进行压缩。参数-Xminf用来控制最小空闲内存。将其设置为-Xminf0.3,则如果内存回收后剩余内存少于30%系统将会扩张堆大小。
        如果你的系统有内存问题,可以考虑将这两个参数设置为-Xmaxf0.4 -Xminf0.2,甚至设置为-Xmaxf0.2 -Xmin0.1. 通过设置这两个参数可以减少许多内存溢出问题。

        如果你想更改如上参数,可以通过更改eclipse.ini这个文件。你可以在RAD安装目录下找到这个文件。



JVM调试-共享类

        RAD通过共享类来提升启动时间。这个是通过在eclipse.ini中配置-Xshareclasses来实现的。如果你想节约内存,你可以去除-Xshareclasses和-Xscmx96m这两个参数。这样虽然可以降低启动内存,但是却会降低启动速度。比如,在我的笔记本上热启动RAD需要11秒并占用249兆内存。当我去除掉共享类这两个参数后启动需要14秒但是只占用209兆内存。
        另外一种降低共享类占用启动内存的方法是更改-Xscmx这个参数。例如将其设置为-Xscmx48m将会降低一般的共享类内存占用。如果你同时开启多个RAD(大多数人不会这样做)这样的话共享类参数将会在节省启动时间的同时节约多个RAD的总内存。



三、测试服务器调优技巧

重启项目而不是应用服务器

        Web项目部署时,如果需要重新部署或者启动。可以仅重启相应WebSphere应用服务器中的某个项目,而不是将整个服务器重启。




应用服务器设置

        在web项目中有许多应用服务器设置可以显著提升应用性能。


        你可以通过双击服务器视图中的某一个应用服务器项目来打开上图所示的编辑器。图中高亮的项目将会影响性能。大多数选项已经被默认设置为最佳性能选项。但是 发布 启用全体测试客户端 选项除外。
        如果你不需要所有测试客户端,可以去掉该选项从而不会将所有测试客户端安装。
        我建议将发布选项设置为
从不自动发布 。因为在你更新服务器应用之前可能会对代码有很多改动。例如,所有对 HTML 或者 JSP 的改动都会被检测到,并可能会自动更新服务器端应用。这样会反复的进行自动发布,将会影响 RAD 性能。
       
最优化测试和开发服务器 应该始终被选中。这个选项将会自动调整某些参数来提升应用服务器的启动速度。



在调试模式下运行应用服务器

        推荐用户在使用WebSphere应用服务器时采用调试模式,因为此时JVM支持方法的动态变更。你对java项目的代码改动会自动加入到应用服务器中,而无需发布操作。需要注意的是,有些代码改动无法被动态加载到应用服务器中,例如类结构的改变。如果此类代码改变发生,则将会在代码保存后收到提示。




应用服务器设置(管理控制台)

        除了在RAD内对应用服务器进行调优,你还可以从WebSphere管理控制台进行调整。当应用服务器启动以后,用户可以从RAD的应用服务器视图启动管理控制台。如下图所示:


        在管理控制台中,选择 应用服务器 (通常叫做 server1 ),并确认 运行在开发模式 并行启动 被选中。这将会对启动速度有更大的提升。


        
        当你运行管理控制台,你可能会需要将所有不需要的应用从应用服务器中卸载。或者默认情况下应用服务器中会有许多事例应用如DefaultApplication,ivtApp和query。你可以按下图所示将其卸载。






发布和标注

        WebSphere 应用服务器支持Java EE5 规范,支持在编码过程中添加语意标注(annotation)。但是分析这些语意标注需要消耗一些时间。如果你确定程序中没有使用到语意标注,可以通过一些设置来取消这个分析过程从而提高性能。这个技巧适用于DynamicWeb Modules 2.5 版本。
        通过设置Web.xml 中的Metadata Complete属性为真可以使WebSphere应用服务器不扫描class文件和jar文件中的语意标注。



        如果程序中包含语意标注,你也可以通过在WebSpere应用服务器中设置哪些jar文件或者包不需要被扫描。从而提高性能。详情请参考Java virtual machine custom properties中的com.ibm.ws.amm.scan.context.filter.archives 和com.ibm.ws.amm.scan.context.filter.packages 。




及时更新

        我们将会持续对RAD进行性能改进。当新版本发布后,我们建议及时更新到最新版本以体验更好的RAD使用过程。







附录一 正确理解RAD 的加载机制

        RAD 采用即时加载机制,即在第一次打开相关功能时对于的内部插件才会被加载到内存中。这样做的好处是 RAD 不会加载不用的功能以减少内存的占用,但另一方面 RAD 需要一些开销对首次使用的功能进行加载 (比方首次打开 JSP 文件,选择右键菜单,首次打开某个视图),通常会花费一些时间 (取决于在同时运行其他多种应用, 如 Notes, ST, Word, IE,etc),这时请不要急于在 RAD 里进行其他操作,以避免更多的系统开销。
        当一些功能长时间没有使用,再次切换回去时,同样的情况也有可能发生。在平时的操作中,操作系统会把在前台的功能和应用加载到物理内存中,而某些功能长时间没有使用的功能会被切换到对应的磁盘虚拟内存上,当调用这些功能时,系统往往需要一些额外的开销重新加载相关代码到内存中,因此会花费一些时间。
        如果当前 CPU 占用率较高,那么可能是某个应用正在运行 (可以通过 Task Manager 进行查看),请等待 RAD 回到正常工作状态。通常 RAD 在恢复正常工作后,再次打开相关应用的相应时间都在 1-2 秒内。

[请注意]
        不要轻易通过杀死进程的方式结束 RAD, 这将导致 RAD Workspace 处于非正常状态,在下次打开时产生不可预知的错误。




附录二 为什么选择手工发布而不是自动发布


        使用手工发布是 RAD 的最佳实践之一,这是因为在大多数情况下代码的变更无需通过发布就可以部署到 Websphere® 服务器上。重新发布应用到Websphere® 服务器上是一个消耗资源较多的动作。在重新发布时,相应的modules 需要停止然后再次启动。当一个 module 启动时,一些客户化的代码将会被执行。例如如用户定义的一些 startup servlets 和 listeners,而这些代码需要在 module 之前被执行(例如 startup 代码中包括的连接数据库操作),因此会对启动时间造成较大影响。所以避免发布应用可以节约大量的时间。
        为了直接部署应用,需要以下三点:

▪ 取消自动发布 (参考本文中 Websphere® 服务器的设定)
▪ 使用工作空间的资源运行服务器(参考本文中Websphere® 服务器的设定)
▪ 使用 debug 模式启动Websphere® 服务器 (参考本文中在 Debug 模式下运行Websphere® 服务器)

        当修改并保存一个Java类文件 (在自动构建打开的情况下), 修改后的 class 文件会自动加载到WebSphere® JVM 中,这时刷新浏览器页面就可以看到相应的变更。同样,对于其他一些文件如 JSP/HTML/CSS 都可以简单的通过保存文件达到部署的目的。

[请注意]
        服务器视图会继续显示应用需要重新发布,这是由于工作区内的文件已经被改变并没有被“正式”发布到服务器上,这是一个提示信息提醒用户可能需要重新发布,但是对于上面提到的文件类型,通常都可以忽略该信息。




[请注意]
        有些代码变更仍然需要重新发布才能生效,例如,如果修改了 web.xml 文件,那么必须重新发布。 同时对于有些Java类的修改也不能直接被加载到 JVM 里面,例如修改一个java类为 final, 或改变它的继承类,对于类似这种的修改,RAD 会给出警告信息: “热部署失败”,这时请点击继续按钮并采取手工发布。



附录三 Single-Root 项目

        下面几点可以帮助您确认项目是否是 Single-Root:

        首先您需要确保您的项目可以在一个目录下产生一个完整的 module archive,如果没有这样的目录,那么您的项目就不是Single-Root,唯一的例外是您可以包含其他的 archives (例如 WEB-LIB/lib 下的archives).
        您的项目的 Java 输出路径是必须单个而非多个文件夹。您可以有多个 Java 源代码目录,但是这些 Java 代码输出必须是同一个目录。
        然后请查看 .settings/org.eclipse.wst.common.component 文件,您会看到一些目录映射。通常这些映射每条应该只包含一个源代码目录,同时被映射到 "/" (除了 Web projects,这种项目的 Web Content folder 会被映射到 "/",同时源码会被映射到"WEB_INF/classes",如果您看到其他不同的映射,那么您的项目可能不是 Single-Root。
        如果您确认上面条件都满足,您可以通过添加下面参数强制项目为 SingleRoot:添加 useSingleRoot="true" element 到 .settings/org.eclipse.wst.common.component 文件中。

关于原文作者:Gary Karasiuk是IBM Toronto实验室的性能分析专家。
.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值