使用 NetBeans Profiler 5.5
使用“分析主项目”分析 J2EE 应用程序
您可以使用“分析主项目”方法,分析在已注册的 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 本地安装上运行的 Web 应用程序、EJB 模块和企业应用程序。此外,还可以使用此方法来分析通过现有 Ant 脚本创建的 Java EE 应用程序(自由格式的 Web 应用程序或 EJB 模块项目)。利用此方法分析应用程序非常简单,只需单击几下鼠标就可以启动性能分析,几乎不需要任何配置。通常,此方法的操作方式与执行“运行项目”菜单命令一样简单、快捷,即在启动 J2EE 应用程序的同时启动 Profiler。建议新用户和经验较少的用户采用此方法。
如果要分析远程应用服务器或者除 Tomcat、Sun Java System Application Server/GlassFish 和 JBoss 以外的本地服务器上的 J2EE 应用程序,请参见使用“连接 Profiler”分析 J2EE 应用程序。
注意:建议您在获取并评估 J2EE 应用程序的性能分析结果之前,首先了解一下性能分析提示。性能分析提示介绍了各种与所分析的应用程序行为和性能分析结果准确性相关的注意事项和提示。
目录:
- 分析本地 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 上的 Web 应用程序的性能
- 分析 EJB 模块和企业应用程序的性能
- 分析基于现有 Ant 脚本的 J2EE 应用程序(自由格式)的性能
- 分析 J2EE 应用程序的内存使用情况
分析本地 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 上的 Web 应用程序的性能
对于在本地 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 上运行的 Web 应用程序,使用 NetBeans Profiler 进行性能分析是首选的方式,而且配置时也最为简便。用户只需要很少的配置并且单击几下鼠标即可启动性能分析。您可以在 NetBeans Profiler 教程中看到 Web 应用程序的性能分析示例。此处提供了 Web 应用程序性能分析的 flash 演示。
设置性能分析会话
如果在 IDE 中将 Web 应用程序设置为主项目,则可以通过从“性能分析”菜单中选择“分析主项目”来打开“选择性能分析任务”对话框。或者,也可以在 IDE 中选择任何打开的 Web 应用程序项目,然后在“性能分析”菜单中选择“分析项目<项目名称>”以打开“选择性能分析任务”对话框。
通过在 .jsp 页或 Servlet 上选择“分析文件”来分析某个文件时,则其行为与“分析(主)项目”类似。唯一的差别是,在运行应用程序时,将在浏览器中打开选定的 Web 页,而不是打开项目的缺省 Web 页。
注意:如果您是第一次分析项目,则会显示一条消息,通知您为了启动性能分析,需要对项目的生成脚本进行修改。
在分析应用程序时,请在“选择性能分析任务”对话框中选择性能分析方法。“选择性能分析任务”对话框中提供了以下方法:
分析性能 - 整个应用程序。如果需要了解整个应用程序行为的大致情况,或者只是不想尝试更多详细的性能分析设置,则应选择这种性能分析方法。使用此模式,将分析应用程序的所有方法。此外,还会分析这些方法调用的所有代码以及 Java 核心类,除非分析过滤器按照下面的方法过滤掉这些代码。“整个应用程序”性能分析产生的性能分析开销通常要比“部分应用程序”性能分析开销大。
如果在“选择性能分析任务”对话框中选择了“分析应用服务器启动时的性能情况”选项,则在执行应用程序的任何代码之前,将首先分析服务器启动时的性能情况。通常情况下,常规性能分析是不需要使用此功能的。
分析性能 - 部分应用程序。如果已经确定性能瓶颈所在的位置,或者需要分析某个特定部分的代码(例如仅一个或几个 Servlet),则应该使用这种性能分析方法。这种方法允许您从要分析的应用程序中选择分析的根方法。有关使用根方法进行性能分析的详细信息,请参见分析根方法。
通常,这种性能分析方法产生的性能分析开销要远低于分析“整个应用程序”的开销。选择这种方法时,将只收集和显示您真正关注的数据。要为性能分析定义根方法,请单击“选择”并使用“从项目添加”选项,然后使用相应的项目树。
分析过滤器。可以使用“分析过滤器”过滤掉各种不需要的包/类。这会显著降低性能分析的开销。您可以在“分析过滤器”中指定要分析的整个应用程序或根方法执行中的包/类。
分析过滤器具有以下两种类型:
- 排除。如果选择此选项,则会将指定的包和类排除在性能分析之外。
- 包含。如果选择此选项,则只分析指定的包/类。
您可以选择快速过滤器进行简单的性能分析过滤器定义,也可以定义您自己的过滤器集合以用于特定项目或特定类型的性能分析。例如,可以创建一个分析过滤器以便在分析 Tomcat 上的 Web 应用程序时使用。您可以创建一个新的“排除”过滤器集合,以过滤掉 Java 核心类、Tomcat 类和 NetBeans 类(在启用 HTTP 监视器时非常有用),并为该过滤器集合指定一个名称,如 "Tomcat WebApp Exclusive"。或者,也可以创建一个“包含”快速过滤器,仅指定项目中定义的包(如 test.servlets 或 test.beans.MyBean)。当选择此过滤器后,就会只分析 test.servlets 包中的类和 test.beans.MyBean 类。
通过上述示例,您会看到可以同时使用几个包/类的定义。在执行此操作时,请使用空格 ( ) 或逗号加空格 (, ) 作为分隔符。您也可以在过滤器定义的结尾使用 "*" 通配符,但由于分析过滤器使用简单的“起始为”逻辑,因此会在求值过程中将其删除。
有关定义和使用分析过滤器的详细信息,请参见分析性能。
启动性能分析
要启动性能分析,请在“选择性能分析任务”对话框中单击“运行”。将立即启动性能分析会话。在单击“运行”时,将执行以下操作:
- 编译 Web 应用程序
- 在性能分析模式下启动目标服务器
- 部署应用程序
- 在浏览器中打开相应的 Web 页
注意:如果要在 Windows 计算机上分析 Sun Java System Application Server 9/GlassFish 服务器中的 Web 应用程序,并且 NetBeans IDE 安装在包含空格的路径中(如缺省安装路径 C:\Program Files\netbeans-5.5),则无法启动用于性能分析的服务器。解决方法是,将 NetBeans 安装或复制到不包含空格的路径位置(如 C:\netbeans-5.5),然后从该安装位置运行 NetBeans。
获取并评估性能分析结果
启动性能分析会话时即开始收集性能分析结果。如果使用“整个应用程序”方法,则在服务器启动后您就会立即获得一些数据,确切地说是 Web 应用程序的侦听程序和过滤器初始化数据。您可以使用 "Profiler" 窗口中的控件来显示实时的性能分析结果,或者生成所收集数据的快照。如果使用“部分应用程序”性能分析方法,根据您所选择的性能分析根方法,很有可能无法获取此数据。
一般情况下并不需要有关侦听程序或过滤器的数据,因此,可以单击“重置收集的结果”以清除该数据。第一批可用数据是通过在 Web 浏览器中的某项操作调用某些代码后收集到的,浏览器通常会显示一个使用 JavaBeans 和/或定制标记或者处理 Servlet 的 doGet/doPost 方法的 .jsp 页。值得注意的是,第一次启动应用程序时收集的数据通常仅表示 Web 应用程序的启动行为。
如果第一次显示 .jsp 页,服务器会在内部将其编译为 Servlet,这会影响调用树和方法计时。此外,Servlet 和其他应用程序代码在第一次运行期间与实际产品环境中的行为略有不同,应用程序在实际的环境中通常处于运行状态。为了获取更好地表示实际应用程序性能的性能分析数据,您应该为所分析的代码生成一些负载,然后再随时进行检测(调用树不会受其影响)。负载生成器可以帮助您完成此操作。您还可以分析 Web 应用程序如何使用各种浏览器的缓存功能。
为了便于更好地读取所收集的数据,您可以在“性能分析结果”窗口的“热点”视图中使用“结果”过滤器。“结果”过滤器适用于已收集的结果,它与分析过滤器无关。使用“结果”过滤器时,可以将结果按照定义的模式(起始为、包含、结束为)进行过滤。您还可以使用更复杂的正则表达式进行过滤。将依据第一个结果表列中显示的包/类/方法名称来过滤数据。与分析过滤器类似,您可以指定多个模式,并用空格或逗号加空格来分隔这些模式。
分析 EJB 模块和企业应用程序的性能
可以使用与 Web 应用程序相同的方法来分析 EJB 模块或企业应用程序的性能。唯一的差别是,在部署 EJB 模块和某些企业应用程序(取决于它们的设置)后,不会自动启动 Web 浏览器。实际上这反映了使用“运行”操作只运行项目的行为。要分析 EJB 模块或企业应用程序,您可以执行以下某种方法:
从手动启动的 Web 浏览器或其他客户端中调用应用程序代码。将应用程序部署到服务器后,您应该调用该应用程序代码,其方式与调试或评估应用程序性能时使用的方式相同。这通常意味着,在 Web 浏览器中启动一个 Web 应用程序前端,该前端应使用分析的 J2EE 应用程序的企业逻辑。也可以使用其他类型的客户端。在调用所分析的 J2EE 应用程序代码后,便可获得性能分析数据。
分析相应的 Web 应用程序前端。您可以指定要用作分析项目的相关 Web 应用程序。通常,EJB 代码会因用户在浏览器中的某项操作而得到执行。如果此操作是由 Web 应用程序代码执行/处理的,则会在其调用树中看到 EJB 代码。要使用这种方法来分析 EJB 模块,请按照分析本地 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 上的 Web 应用程序的性能中所述的步骤进行操作。请注意,在进行分析之前,必须编译 EJB 模块并将其部署到服务器上,而在分析相关 Web 应用程序时不必执行此操作。
分析基于现有 Ant 脚本的 J2EE 应用程序(自由格式)的性能
分析基于现有 Ant 脚本的 Web 应用程序或 EJB 模块与上述分析本地 Tomcat、SJSAS/GlassFish 或 JBoss 服务器上的 Web 应用程序或 EJB 模块类似。唯一的差别是,您需要对生成脚本和服务器启动脚本进行一些修改。
配置自由格式 J2EE 应用程序以进行性能分析
要分析基于现有 Ant 脚本的 J2EE 应用程序(自由格式的项目),您需要对生成脚本和服务器启动脚本进行一些修改。总体说来,就是添加一个用于分析项目的新 Ant 目标(还可能需要添加另一个用于分析单独文件的目标),并且修改服务器启动脚本以启用 Profiler 代理。还应该配置性能分析 Ant 目标以便将应用程序自动部署到服务器上。有关修改用于性能分析的生成脚本的详细信息,请参见如何设置包含现有 Ant 脚本且要进行性能分析的项目(自由格式的项目)。Profiler“连接向导”中提供了有关修改服务器启动脚本的信息。要显示该向导,请从主菜单中选择“性能分析”>“连接 Profiler”,然后在“选择性能分析任务”对话框中单击“连接向导...”。
第一次启动自由格式项目的性能分析时,系统将要求您选择用于性能分析的 Ant 任务。随后将保存此设置,并在该项目的每个其他性能分析会话中使用。配置了要进行性能分析的自由格式项目后,您可以像分析任何其他 IDE J2EE 项目一样来分析该项目。
完成配置后,可以按照分析本地 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 上的 Web 应用程序的性能或分析 EJB 模块和企业应用程序的性能中所述的步骤来分析基于现有 Ant 脚本的 J2EE 应用程序。请注意,您可以在任何为性能分析配置的服务器上分析自由格式项目,而不仅仅是部署到 Tomcat 或 Sun Java System Application Server 上的项目。
分析 J2EE 应用程序的内存使用情况
您可以通过选择 NetBeans Profiler 中的“分析内存使用情况”任务,分析 J2EE 应用程序的内存使用情况。通过选择“分析主项目”,您可以分析本地 Tomcat 或 Sun Java System Application Server 上运行的 J2EE 应用程序的内存情况,也可以分析通过现有 Ant 脚本创建且正确配置的 J2EE 应用程序(自由格式)的内存情况。有关内存性能分析的详细信息,请参见分析内存使用情况。有关分析 Web 应用程序的内存使用情况的示例,请参见 NetBeans Profiler 教程。
在分析内存时,您无法设置性能分析根方法和/或分析过滤器,因此系统会跟踪服务器生命周期内创建的所有对象。这会为复杂的应用服务器(如 Sun Java System Application Server/GlassFish)带来巨大的性能分析开销和内存消耗。因此,应使用性能足够强大的计算机来执行此类性能分析。要降低性能分析开销,您可以将设置修改为只分析每次的第 10 个对象。您还可以禁止(限制)记录对象分配的栈跟踪。
在检测 J2EE 应用程序内存泄漏时,记录“存活的年代数”会非常有用。通过跟踪各个对象经历垃圾回收周期的年代数数值,NetBeans Profiler 可以在其消耗大量内存前检测到内存泄漏。有关详细信息,请参见性能分析结果 - 内存使用情况。
