corner imagecorner image FeaturesPluginsPlatformDocs & SupportCommunityPartners


使用“连接 Profiler”分析 J2EE 应用程序

如果要分析远程应用服务器或者除 Tomcat、Sun Java System Application Server/GlassFish 和 JBoss 以外的本地服务器上的 J2EE 应用程序,则需要使用“连接 Profiler”方法。然而,此方法需要对服务器和服务器启动脚本进行一些手动配置。并且还需要手动编译 J2EE 应用程序并将其部署到服务器上。建议具有丰富经验的用户采用此方法。

如果要分析一个运行在已注册的 Tomcat、Sun Java System Application Server/GlassFish 或 JBoss 本地安装上的 J2EE 应用程序,请参见使用“分析主项目”分析 J2EE 应用程序

注意:建议您在获取并评估 J2EE 应用程序的性能分析结果之前,首先了解一下性能分析提示。性能分析提示介绍了各种与所分析的应用程序行为和性能分析结果准确性相关的注意事项和提示。

目录:



分析任何本地或远程 Web/应用服务器上的 J2EE 应用程序的性能

您可以使用“连接 Profiler”方法来分析任何本地或远程 Web/应用服务器上运行的 J2EE 应用程序。使用这种方法时,必须手动编译应用程序并将其部署到服务器上。此外,还需要手动修改服务器启动脚本以便在服务器上进行性能分析,然后手动启动该服务器并通过 Web 浏览器或其他客户端调用应用程序代码。

将 J2EE 应用程序部署到服务器上

在分析本地或远程 Web/应用服务器上的 J2EE 应用程序之前,必须手动编译该应用程序并将其部署到这些服务器上。如果 IDE 支持目标服务器(Tomcat、Sun Java System Application Server/GlassFish、JBoss、WebLogic),则可以在项目属性中将该服务器指定为部署服务器,然后在 IDE 中使用“生成项目”和“部署项目”。要指定目标服务器,请右键单击该项目,然后在弹出式菜单中选择“属性”。在“项目属性”对话框的“运行”类别中,从已在 IDE 中注册的服务器列表中选择目标服务器。

如果 IDE 不支持您使用的服务器,则在进行性能分析之前,必须手动将应用程序部署到该服务器上。对于很多服务器而言,这意味着将 .war/.ear 文件复制到自动部署目录中。有关部署应用程序的说明,请参见相关的服务器文档。

配置并启动服务器

您可以使用以下两种方法将 Profiler 连接至服务器:

  • 直接连接。直接连接意味着,只有在 Profiler 建立与服务器的连接后,Profiler 代理才会与服务器 VM 进行通信。使用“直接连接”启动服务器时,并不会真正启动服务器。实际上服务器会等待 Profiler。直到与 Profiler 建立连接后,服务器才会启动。“直接连接”是分析 J2EE 应用程序的首选方法,因为它可以与 Profiler 支持的标准 JDK 一起使用。
  • 动态连接。“动态连接”允许您在启动服务器后连接 Profiler。只有使用改进的 Profiler JDK 运行服务器时,才能使用此方法。注意:目前不再支持改进的 Profiler JDK。

要配置并启动用于性能分析的服务器,请参考 Profiler“连接向导”中的说明。要打开“连接向导”,请在“性能分析”菜单中选择“连接 Profiler”。在“选择性能分析任务”对话框中,单击“连接向导...”。强烈建议您将服务器配置为“直接连接”。使用“连接向导”时,将为您创建一个改进的用于在性能分析模式下启动服务器的启动脚本。对于 Tomcat、Sun Java System Application Server 8.x PE/GlassFish 和 JBoss,可以自动创建启动脚本,并且可以从“连接向导”中直接启动本地服务器。如果“连接向导”中没有列出目标服务器,请参考“通用 Web/应用服务器”说明。

或者,如果要启动一个 Tomcat 或 Sun Java System Application Server/GlassFish 注册实例进行“直接连接”,则可以在“运行环境”窗口中右键单击该服务器实例,然后选择“在性能分析模式下启动”。这种情况下不需要进行额外的配置。在服务器准备好性能分析后,只需选择一种性能分析任务,然后单击“连接”即可。

注意:如果要在 Windows 计算机上分析 Sun Java System Application Server 9/GlassFish 服务器中的 J2EE 应用程序,并且 NetBeans IDE 安装在包含空格的路径中(如缺省安装路径 C:\Program Files\netbeans-5.5),则无法启动用于性能分析的服务器。解决方法是:将 NetBeans IDE 安装或复制到不包含空格的路径位置(如 C:\netbeans-5.5),然后从该位置运行 IDE。

设置性能分析会话

在配置并启动用于性能分析的服务器后,若要设置性能分析会话,请从“性能分析”菜单中选择“连接 Profiler”以打开“选择性能分析任务”对话框。从“选择性能分析任务”对话框顶部的下拉列表中选择相应的 J2EE 应用程序。注意:请不要选择 "<全局连接>" 选项。"<全局连接>" 选项只用于分析没有项目或源文件的应用程序。如果您是第一次分析项目,则会显示一条消息,通知您为了启动性能分析,需要对项目的生成脚本进行修改。

在分析应用程序时,请在“选择性能分析任务”对话框中选择性能分析方法。“选择性能分析任务”对话框中提供了以下方法:

分析性能 - 整个应用程序。如果需要了解整个应用程序行为的大致情况,或者只是不想尝试更多详细的性能分析设置,则应选择这种性能分析方法。使用此模式,将分析应用程序的所有方法。此外,还会分析这些方法调用的所有代码以及 Java 核心类,除非分析过滤器按照下面的方法过滤掉这些代码。“整个应用程序”性能分析产生的性能分析开销通常要比“部分应用程序”性能分析开销大。

如果在“选择性能分析任务”对话框中选择了“分析应用服务器启动时的性能情况”选项,则在执行应用程序的任何代码之前,将首先分析服务器启动时的性能情况。通常情况下,常规性能分析是不需要使用此功能的。

分析性能 - 部分应用程序。如果已经确定性能瓶颈所在的位置,或者需要分析某个特定部分的代码(例如仅一个或几个 Servlet),则应该使用这种性能分析方法。这种方法允许您从要分析的应用程序中选择分析的根方法。有关使用根方法进行性能分析的详细信息,请参见分析根方法

通常,这种性能分析方法产生的性能分析开销要远低于分析“整个应用程序”的开销。选择这种方法时,将只收集和显示您真正关注的数据。要为性能分析定义根方法,请单击“选择”并使用“从项目添加”选项,然后使用相应的项目树。

分析过滤器。可以使用“分析过滤器”过滤掉各种不需要的包/类。这会显著降低性能分析的开销。您可以在“分析过滤器”中指定要分析的整个应用程序或根方法执行中的包/类。

分析过滤器具有以下两种类型:

  • 排除。如果选择此选项,则会将指定的包和类排除在性能分析之外。
  • 包含。如果选择此选项,则只分析指定的包/类。

您可以选择快速过滤器进行简单的性能分析过滤器定义,也可以定义您自己的过滤器集合以用于特定项目或特定类型的性能分析。例如,可以创建一个分析过滤器以便在分析 Tomcat 上的 Web 应用程序时使用。您可以创建一个新的“排除”过滤器集合,以过滤掉 Java 核心类、Tomcat 类和 NetBeans 类(在启用 HTTP 监视器时非常有用),并为该过滤器集合指定一个名称,如 "Tomcat WebApp Exclusive"。或者,也可以创建一个“包含”快速过滤器,仅指定项目中定义的包(如 test.servletstest.beans.MyBean)。当选择此过滤器后,就会只分析 test.servlets 包中的类和 test.beans.MyBean 类。

通过上述示例,您会看到可以同时使用几个包/类的定义。在执行此操作时,请使用空格 ( ) 或逗号加空格 (, ) 作为分隔符。您也可以在过滤器定义的结尾使用 "*" 通配符,但由于分析过滤器使用简单的“起始为”逻辑,因此会在求值过程中将其删除。

有关定义和使用分析过滤器的详细信息,请参见分析性能

启动性能分析

连接 Profiler - 直接连接。要在“直接连接”模式下启动性能分析,请在“选择性能分析任务”对话框中单击“连接”。如果 Profiler 代理已经在服务器端等待建立连接,则 Profiler 会立即建立连接。如果 Profiler 代理没有运行,则会显示一个带有进度指示器的对话框,表示 Profiler 正在等待代理启动。如果尚未启动用于性能分析的服务器,则应立即启动该服务器。请注意,对于某些使用本机启动程序的服务器(如 Sun Java System Application Server/GlassFish)来说,在运行服务器启动脚本后,需要几秒钟的时间才会激活 Profiler 代理并准备进行连接。在收集了性能分析数据后,您可以断开与 Profiler 的连接,而无需停止服务器。

连接 Profiler - 动态连接。对于“动态连接”,应在服务器的启动过程全部结束后,再建立与 Profiler 的连接。要连接为“动态连接”配置的服务器,请在“选择性能分析任务”对话框中单击“连接”,然后使用以下某个连接方法。

  • PID 连接。如果使用这种方法,则会显示一个对话框,其中列出了所有正在运行且 Profiler 可以进行连接的 VM。选择要连接的相应 VM 并单击“确定”后,Profiler 将与服务器进行连接并开始分析 J2EE 应用程序。
  • Ctrl+Break 或 Ctrl+\。如果可以使用服务器控制台,则可以使用 Ctrl+Break (Windows) 或 Ctrl+\ (UNIX) 连接方法。单击“连接”后,将显示一个带有进度指示器的对话框。此对话框指示 Profiler 正在等待建立连接。要调用连接,请在服务器控制台中按该组合键。调用连接时,Profiler 将连接至服务器并开始分析 J2EE 应用程序。在收集了性能分析数据后,您可以断开与 Profiler 的连接,而无需停止服务器。

    在 UNIX 上,如果始终保持服务器的运行状态,则可以随时与 Profiler 进行重新连接并进行性能分析。但是,在 Windows 上,只允许为单个服务器会话建立一次动态连接,再次尝试建立连接时将会失败。

对于这两种连接方法,都必须设置正确的应用程序工作目录,否则,动态连接将会失败。工作目录会根据服务器的不同而有所差异。例如,Tomcat 的工作目录是启动脚本的启动目录。如果可以使用服务器控制台,则可以通过调用线程转储 (Ctrl+Break) 来确定工作目录;同时还会显示一条调试消息:"JFluid: JVM startup directory is ..."(JFluid:JVM 的启动目录为...)。否则,可通过使用简单的 Servlet 等方法来获取工作目录,该方法会输出相应的系统属性值:System.getProperty("user.dir");

获取并评估性能分析结果

启动性能分析会话时即开始收集性能分析结果。如果使用“整个应用程序”方法,则在服务器启动后您就会立即获得一些数据,确切地说是 Web 应用程序的侦听程序和过滤器初始化数据。您可以使用 "Profiler" 窗口中的控件来显示实时的性能分析结果,或者生成所收集数据的快照。如果使用“部分应用程序”性能分析方法,根据您所选择的性能分析根方法,很有可能无法获取此数据。

一般情况下并不需要有关侦听程序或过滤器的数据,因此,可以单击“重置收集的结果”以清除该数据。第一批可用数据是通过在 Web 浏览器中的某项操作调用某些代码后收集到的,浏览器通常会显示一个使用 JavaBeans 和/或定制标记或者处理 Servlet 的 doGet/doPost 方法的 .jsp 页。值得注意的是,第一次启动应用程序时收集的数据通常仅表示 J2EE 应用程序的启动行为。

如果第一次显示 .jsp 页,服务器会在内部将其编译为 Servlet,这会影响调用树和方法计时。此外,Servlet 和其他应用程序代码在第一次运行期间与实际产品环境中的行为略有不同,应用程序在实际的环境中通常处于运行状态。为了获取更好地表示实际应用程序性能的性能分析数据,您应该为所分析的代码生成一些负载,然后再随时进行检测(调用树不会受其影响)。负载生成器可以帮助您完成此操作。您还可以分析 J2EE 应用程序如何使用各种浏览器的缓存功能。

为了便于更好地读取所收集的数据,您可以在“性能分析结果”窗口的“热点”视图中使用“结果”过滤器。“结果”过滤器适用于已收集的结果,它与分析过滤器无关。使用“结果”过滤器时,可以将结果按照定义的模式(起始为、包含、结束为)进行过滤。您还可以使用更复杂的正则表达式进行过滤。将依据第一个结果表列中显示的包/类/方法名称来过滤数据。与分析过滤器类似,您可以指定多个模式,并用空格或逗号加空格来分隔这些模式。



分析没有项目或源文件的 J2EE 应用程序的性能

您可以使用 NetBeans Profiler 来分析任何 Java 应用程序,即使没有程序的源文件或未将其配置为 IDE 项目。但是,某些高级功能(如自动确定根方法来分析整个应用程序以及“转至源”功能)将无法使用。要分析没有项目或源文件的 J2EE 应用程序,请按照分析任何本地或远程 Web/应用服务器上的 J2EE 应用程序的性能中所述的步骤进行操作。在“选择性能分析任务”对话框顶部的下拉列表中,选择 "<全局连接>" 选项。这会通知 Profiler,性能分析会话没有已知的项目上下文。

使用“部分应用程序”模式来分析没有项目或源文件的应用程序时,必须在“指定根方法”对话框中使用“手动添加”选项,通过输入类名、方法名称和方法签名来手动定义性能分析根方法。请注意,方法签名必须采用 VM 格式。您可以使用 JDK 版本中的 javap 工具来确定 .class 文件中的正确方法签名(用法:javap -s package.ClassName)。



分析 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 可以在其消耗大量内存前检测到内存泄漏。有关详细信息,请参见性能分析结果 - 内存使用情况

 

Project Features

About this Project

Profiler was started in November 2009, is owned by Tomas Hurka, and has 41 members.
 
 
Close
loading
Please Confirm
Close