作者: 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将会在有代码改动时自动进行增量构建。包括构建(或者编译)所有依赖的文件。自动构建同样会运行相关验证操作。通常这些操作都很快;如果在保存文件时发现构建时间较长,可以考虑关闭自动构建,在进行一系列的代码修改后然后一次构建所有变更。但这样将不能及时的看到代码错误。通常,是否选择自动构建取决于用户习惯。
如果将自动构建取消,你需要时常进行构建操作(Ctrl + B)。这将会构建所有改动项以及所依赖的项。这同样是增量构建,只不过增量较大且用户可以决定何时构建。
自动刷新会查看是否有外部进程改变了工作区内的文件,我建议把自动刷新功能关闭。
[具体操作]
在RAD菜单窗口 → 首选项 → 常规 → 工作空间
去除RAD 中不必要的功能
如果某些功能是不必要的,关闭它们将会避免不必要的性能损失。
[具体操作]
在RAD菜单窗口 → 首选项 → 常规 → 功能(Capbilities)
关闭快速差异显示
在RAD菜单窗口 → 首选项 → 常规 → 编辑器 → 文件编辑器 → 快速差异显示
去除标签装饰
[具体操作]
在RAD菜单窗口 → 首选项 → 常规 → 外观 → 标签装饰
取消链接索引
[具体操作]
在RAD菜单窗口 → 首选项 → Web项目 → 链接
如果需要取消所有链接索引操作,你可以增加一个新的资源忽略项,匹配模式为*。
快速启动
去除不必要的检验
另外需要注意:
▪ JSP编译检验器将会降低性能。
▪ 当XML检验器引用了扩展服务器中的DTD或者XML schema文件将会降低性能。
二、其他RAD性能调优技巧
使用 Binary Projects
[具体操作]
请参考 IBM 相关技术文档
关闭不必要项目
定期整理磁盘
仅安装必须功能
保持干净的工作空间
1. 确定所有文件已经被提交到源码管理系统里。
2. 将所有项目进行打包操作并导出。3. 导出首选项配置。4. 关闭Rational Application Developer。5. 删除工作空间文件夹。6. 启动Rational Application Developer。7. 导入首选项配置。8. 导入打包好的所有工作项目。
请注意:有很多信息并不是保存在源代码管理系统中的,比如首选项、自定义的键盘快捷键、过滤器、工作集定义(workingset),断点,VM设置、代码模板、编辑器设置、标签、CVS代码库地址等。如果你设置了提到的这些东西,可能清理工作空间就不是特别好了。
通过任务管理器监控RAD
远程测试服务器
在RAD以外同时运行多个本地测试服务器将会极大地消耗系统内存。所以我们推荐最多在本地运行一个测试服务器。
重启RAD
当你使用更多的功能,将会有更多的类被加载到内存中。RAD采用慢加载模式,也就是说某一个功能的代码只有当功能被用到的时候才会被加载到内存当中。比方说,如果你之前没有用到XML编辑器,那么只有当你用到XML编辑器的时候相关代码才会被加载。并且被加载的代码所占用的内存不会被释放,也就是说只有重新启动RAD才能释放这些内存。所以我们建议每天至少重启一次RAD。JVM参数调整
有许多文章都介绍了如何对JVM参数进行调整。-Xmx是其中经常提及的一个参数。这个参数是用来控制Java虚拟机堆中可以分配的最大内存数。RAD默认最大内存数是1GB。设置成这个默认值是为了RAD可以支持较大的和复杂的工作空间。你可以降低这个默认值来使RAD内存消耗的可能性变小,但是不推荐将数值设置小于 -Xmx512M 。设置为:
参数中的数值为百分数。-Xmaxf0.6说明JVM将会在空闲内存超过60%的时候对内存进行压缩。将这个值降低可以在内存回收压力增大的时候降低内存堆的大小。例如,将-Xmaxf设置为0.3可以使内存在空闲率超过40%的时候进行压缩。参数-Xminf用来控制最小空闲内存。将其设置为-Xminf0.3,则如果内存回收后剩余内存少于30%系统将会扩张堆大小。▪ -Xmaxf0.6▪ -Xminf0.3
如果你的系统有内存问题,可以考虑将这两个参数设置为-Xmaxf0.4 -Xminf0.2,甚至设置为-Xmaxf0.2 -Xmin0.1. 通过设置这两个参数可以减少许多内存溢出问题。
如果你想更改如上参数,可以通过更改eclipse.ini这个文件。你可以在RAD安装目录下找到这个文件。
JVM调试-共享类
另外一种降低共享类占用启动内存的方法是更改-Xscmx这个参数。例如将其设置为-Xscmx48m将会降低一般的共享类内存占用。如果你同时开启多个RAD(大多数人不会这样做)这样的话共享类参数将会在节省启动时间的同时节约多个RAD的总内存。
三、测试服务器调优技巧
重启项目而不是应用服务器
应用服务器设置
如果你不需要所有测试客户端,可以去掉该选项从而不会将所有测试客户端安装。
我建议将发布选项设置为 从不自动发布 。因为在你更新服务器应用之前可能会对代码有很多改动。例如,所有对 HTML 或者 JSP 的改动都会被检测到,并可能会自动更新服务器端应用。这样会反复的进行自动发布,将会影响 RAD 性能。
最优化测试和开发服务器 应该始终被选中。这个选项将会自动调整某些参数来提升应用服务器的启动速度。
在调试模式下运行应用服务器
应用服务器设置(管理控制台)
发布和标注
通过设置Web.xml 中的Metadata Complete属性为真可以使WebSphere应用服务器不扫描class文件和jar文件中的语意标注。
及时更新
附录一 正确理解RAD 的加载机制
当一些功能长时间没有使用,再次切换回去时,同样的情况也有可能发生。在平时的操作中,操作系统会把在前台的功能和应用加载到物理内存中,而某些功能长时间没有使用的功能会被切换到对应的磁盘虚拟内存上,当调用这些功能时,系统往往需要一些额外的开销重新加载相关代码到内存中,因此会花费一些时间。
如果当前 CPU 占用率较高,那么可能是某个应用正在运行 (可以通过 Task Manager 进行查看),请等待 RAD 回到正常工作状态。通常 RAD 在恢复正常工作后,再次打开相关应用的相应时间都在 1-2 秒内。
[请注意]
不要轻易通过杀死进程的方式结束 RAD, 这将导致 RAD Workspace 处于非正常状态,在下次打开时产生不可预知的错误。
附录二 为什么选择手工发布而不是自动发布
为了直接部署应用,需要以下三点:
▪ 取消自动发布 (参考本文中 Websphere® 服务器的设定)▪ 使用工作空间的资源运行服务器(参考本文中Websphere® 服务器的设定)▪ 使用 debug 模式启动Websphere® 服务器 (参考本文中在 Debug 模式下运行Websphere® 服务器)
[请注意]
服务器视图会继续显示应用需要重新发布,这是由于工作区内的文件已经被改变并没有被“正式”发布到服务器上,这是一个提示信息提醒用户可能需要重新发布,但是对于上面提到的文件类型,通常都可以忽略该信息。
有些代码变更仍然需要重新发布才能生效,例如,如果修改了 web.xml 文件,那么必须重新发布。 同时对于有些Java类的修改也不能直接被加载到 JVM 里面,例如修改一个java类为 final, 或改变它的继承类,对于类似这种的修改,RAD 会给出警告信息: “热部署失败”,这时请点击继续按钮并采取手工发布。
附录三 Single-Root 项目
您的项目的 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实验室的性能分析专家。
.