使用 NetBeans Profiler 5.5
将 Profiler 连接至本地或远程 JVM
在 Profiler 的连接模式下,可以将该工具连接至在本地或远程计算机上运行或即将启动的应用程序。这使得 Profiler 非常适于分析运行时间长的应用程序,尤其适于分析在应用服务器上运行的 Web 应用程序或企业应用程序以及应用服务器本身的代码。
启动性能分析之前
对于每个将用于分析的 Java 平台,必须先运行校准。如果没有有效的校准数据,将无法启动性能分析。
连接模式
在将 Profiler 连接至应用程序时,可以选择以下类型的连接:
- 动态连接
使用此方法可将 Profiler 连接至已运行的本地应用程序。如果在改进的 JVM 上运行应用程序,则此方法不需要任何其他应用程序设置,并且不需要任何特殊的命令行选项或环境变量。
以下内容适用于动态连接模式:
- Profiler 不启动目标应用程序。
- 在远程计算机上连接/启动性能分析时,不能使用此模式。有关远程连接的说明,请参见直接连接。
- 此模式不适用于 JVM 5/6。如果要连接已运行的应用程序,则必须在定制的 Profiler JVM(基于 JDK 1.4.2)上启动该应用程序,这与通常启动该应用程序的方式完全相同。应用程序 JVM 和 Profiler 应该由同一个用户来运行以满足操作系统的安全要求。
- 直接连接
在执行应用程序中的任何 Java 代码之前,如果要将 Profiler 提前连接至该应用程序(例如,对应用程序的启动情况进行性能分析),请使用此方法。如果分析远程计算机上的应用程序或分析使用 JVM 5/6 的应用程序,则必须使用此模式。
以下内容适用于直接连接模式:
- 在 JVM 5/6 下运行的模式。
- 此模式目前是连接/启动远程计算机上的应用程序性能分析的唯一方法。如果要分析远程计算机上的应用程序,请下载用于远程计算机平台的 Profiler 服务器包,网址为:http://profiler.netbeans.org/download/index.html。
其内部的工作方式
在将 Profiler 连接至正在运行的应用程序时,调用了 Profiler 中一个将操作系统信号发送到 JVM 的命令。作为响应,JVM 装入并激活 Profiler VM 端的库。然后便可以对运行的应用程序执行某些操作,这与通过该工具启动此应用程序时执行的操作完全相同。如果要与 JVM 进行提前(“直接”)连接,您必须在目标 JVM 的命令行上指定相同的库和几个其他选项。
连接向导
第一次将 Profiler 连接至某个应用程序时,可以使用连接向导指定和捕获将 Profiler 连接至该应用程序时使用的设置。使用连接向导可以指定应用程序的类型、位置以及连接模式。如果要更改这些设置,请重新通过连接向导进行更改。
如何使用连接向导
从主菜单中选择“连接 Profiler”时,可以使用连接向导。在打开该向导之前,请确保在“选择性能分析任务”窗口顶部的组合框中选择该项目。
- 在“选择性能分析任务”窗口中单击“连接向导”。
- 选择目标类型(如果目标为 J2EE Web/应用服务器,请选择服务器类型,),然后单击“下一步”。
- 选择应用程序或服务器位置,执行以下操作,然后单击“下一步”。
- 如果位置为“远程”,请提供主机名和主机操作系统。
- 如果位置为“本地”,请选择“直接”或“动态”连接(如果选择“动态”连接,则需要指定工作目录以及在下一步中调用的连接方式)。

- 检查连接设置并执行以下某项操作:
- 如果要指定集成类型和目标 JVM,请单击“下一步”并查看集成步骤。这些集成步骤提供了有关如何将 Profiler 与应用程序进行集成的详细信息。如果这是第一次将 Profiler 连接至应用程序,建议您仔细检查并了解这些集成步骤。
- 如果不需要指定或修改集成类型,请单击“完成”并退出该向导。

完成连接向导后,连接设置将与项目相关联。如果要更改任何设置,可随时通过连接向导进行更改。
如何将 Profiler 连接至运行的 JVM(动态连接)
要在此模式下进行连接,必须在定制的 1.4.2 Profiler JVM 上启动应用程序。以下步骤描述了如何在定制 JVM 上启动应用程序,并将 Profiler 连接至 JVM。
在定制的 Profiler JVM 上启动目标应用程序。
- 找到定制的 Profiler JVM
Profiler JVM 位于目录 userdir > modules > profiler-ea-vm 中
目录路径可能如下所示:
/home/johnsmith/.netbeans/5.5/modules/profiler-ea-vm
(在 UNIX® 上)
或
c:\Documents and Settings\johnsmith\.netbeans\5.5\modules\profiler-ea-vm
(在 Windows 上)。
(在这些示例中,请将 "johnsmith" 替换为您的登录名) - 启动目标应用程序
以普通方式启动应用程序,但在命令行上指定 Profiler JVM 可执行文件的路径
C:\j2sdk1.4.2_06\demo\jfc\SwingSet2>D:\userdir\modules\profiler-ea-vm\jre\bin\java -jar SwingSet2.jar
- 找到定制的 Profiler JVM
在连接向导中指定连接设置
如果这是第一次将 Profiler 连接至应用程序,请单击“连接向导”以帮助设定初始连接设置。在将 Profiler 连接至应用程序时,将使用这些设置。如果已指定了连接设置,请转至步骤 3。
- 从主菜单中选择“连接 Profiler”。
- 从“选择性能分析任务”窗口顶部的组合框中选择项目。
- 打开连接向导,并提供有关应用程序类型和位置的详细信息。在向导中,执行以下操作:
- 选择“本地”作为位置。
- 选择“动态”作为连接方法。
- 为应用程序提供工作目录。
工作目录是指启动目标应用程序的目录,而不是定制的 Profiler JVM 所在的目录。在以上示例中,工作目录是 C:\j2sdk1.4.2_06\demo\jfc\SwingSet2,而不是 D:\userdir\modules\...\jre\bin。
- 选择 PID 或 Ctrl+Break 组合键作为调用方法。
如果可以通过命令行参数和/或进程 ID (Process ID, PID) 来区分运行的 VM,请选择 "PID"。如果要连接的 VM 具有控制台窗口,请选择“使用 Ctrl+Break 组合键”。
确保您具有工作目录的写入访问权限。这是必需的,因为 Profiler 需要将一个特殊的小文件临时放在该目录中,其中包含 VM 启动 Profiler 通信库所需的信息。
- 单击“完成”退出连接向导并返回到“选择性能分析任务”窗口。
现在,这些设置与项目相关联了。如果要更改项目的某些性能分析设置,请重新使用连接向导。
-
指定性能分析任务
从可用任务的列表中选择一个性能分析任务。此列表与在 IDE 中分析应用程序时出现的“选择性能分析任务”窗口中的列表相同。
将 Profiler 连接至目标应用程序
要连接 Profiler,请单击“选择性能分析任务”窗口底部的“连接”。使用动态连接分析应用程序时,单击“连接”后,将执行以下某项操作:
- 如果选择 "PID" 作为调用方法,单击“连接”可完成连接过程。
- 如果选择“使用 Ctrl+Break 组合键”作为调用方法,单击“连接”可打开进度对话框。转至目标 VM 的控制台窗口,并在键盘上按 Ctrl+Break 组合键(在 Windows 上)或按 Ctrl+\ 组合键(在 Solaris 或 Linux 上)。这会向 JVM 发送一个激活 Profiler 代理并启动连接的信号。
请注意,在按 Ctrl+Break 组合键时,JVM 将输出当前活动的 Java 线程及其栈的列表,然后检查其能否启动 Profiler 代理。如果指定的工作目录名称正确无误,VM 将启动该库并输出“JFluid:正在端口上启动目标应用程序管理器...”,Profiler 中的进度对话框将消失。否则,不会执行任何操作,应用程序只是继续运行而已。
中断 Profiler 与目标应用程序的连接
要中断 Profiler 与目标应用程序的连接,请从主菜单中选择“性能分析”>“中断连接”。这将发送一个命令以取消激活目标 JVM 中的 Profiler 代码并终止连接。控制台窗口中将显示消息“结束与代理的连接”(如果目标应用程序具有控制台窗口)。
如何在应用程序启动时将 Profiler 连接至 JVM(直接连接)
如果要分析的应用程序正在 JVM 5/6 或远程服务器上运行,则必须使用此连接模式。如果要分析远程计算机上的应用程序,请下载用于远程计算机平台的 Profiler 服务器包,网址为:http://profiler.netbeans.org/download/index.html。
尽管连接至运行的应用程序通常是将 Profiler 与目标应用程序相连接的最简便方法,但有时您会发现这种方法并不完全适用。其中一个示例是,您要分析在应用程序启动之前执行的某些代码,但是难以从 Profiler 中直接启动应用程序(例如,因为应用程序通常是使用很大且相当复杂的启动脚本来启动的)。另一个示例是远程性能分析。对于这些情况,您可以使用“直接”连接模式在“启动时进行连接”。这与大多数传统的 Java 性能分析工具使用的连接机制相同。
- 修改目标应用程序 JVM 的启动选项。
在启动目标 JVM 之前,您需要将某些参数添加到 Java 启动程序中,以便在目标 JVM 内启动 Profiler 本地库 (profilerinterface)。
这些参数略有差别,具体取决于是在改进的 JDK 1.4.2 还是 JVM 5/6 上运行 JVM。
在改进的 JDK 1.4.2 上,请执行以下步骤:
-
将以下项添加到本地库路径中。
此项是特定于平台的 Profiler 模块安装子目录(包含本地库)。
对于用户名 johnsmith,完整的命令行应该显示如下:-
在 Solaris/SPARC 上(应该将其添加到 LD_LIBRARY_PATH 环境变量中):
setenv LD_LIBRARY_PATH /home/johnsmith/.netbeans/5.5/lib/deployed/jdk142/solaris-sparc
-
在 Windows 上(应该将其添加到 PATH 环境变量中):
set PATH="c:\Documents and Settings\johnsmith\.netbeans\5.5\lib\deployed\jdk142\windows";%PATH%
-
在 Solaris/SPARC 上(应该将其添加到 LD_LIBRARY_PATH 环境变量中):
- 将以下参数添加到 Java 启动程序命令行中:
要在“直接连接”性能分析模式下启动目标定制的 1.4.2 JVM,您需要将以下内容添加到命令行中。
-Xrunprofilerinterface:~/.netbeans/5.5/lib,5140对于用户名 johnsmith,完整的命令行应该显示如下:
- 在 Solaris/SPARC 平台上(假设 csh 或 tcsh 是 shell):
/home/johnsmith/.netbeans/5.5/modules/profiler-ea-vm/jre/bin/java -Xrunprofilerinterface:/home/johnsmith/.netbeans/5.5/lib,5140
MainClass - 在 Windows 上:
"c:\Documents and Settings\johnsmith\.netbeans\5.5\modules\profiler-ea-vm\jre\bin\java"
-Xrunprofilerinterface:"\"c:\Documents and Settings\johnsmith\.netbeans\4.0\lib\"",5140 MainClass
- 在 Solaris/SPARC 平台上(假设 csh 或 tcsh 是 shell):
在 JVM 5/6 上,请执行以下步骤:
- 将以下参数添加到 Java 启动程序命令行中:
要在“直接连接”性能分析模式下启动目标 JVM 5/6,您需要将以下内容添加到命令行中。
-agentpath:~/.netbeans/5.5/lib/deployed/jdk15/solaris-sparc/libprofilerinterface.so=~/.netbeans/4.0/lib,5140对于用户名 johnsmith,完整的命令行应该显示如下:
- 在 Solaris/SPARC 平台上(假设 csh 或 tcsh 是 shell):
java
-agentpath:/home/johnsmith/.netbeans/5.5/lib/deployed/jdk15/solaris-sparc/libprofilerinterface.so=
/home/johnsmith/.netbeans/4.0/lib,5140
MainClass - 在 Windows 上:
java
-agentpath:"c:\Documents and Settings\johnsmith\.netbeans\5.5\lib\deployed\jdk15\windows\profilerinterface.dll"=
"\"c:\Documents and Settings\johnsmith\.netbeans\5.5\lib\"",5140 MainClass
- 在 Solaris/SPARC 平台上(假设 csh 或 tcsh 是 shell):
注意:在 Windows 上,如果路径包含空格字符,则需要用双引号将 -Xrunprofilerinterface 或 -agentpath 参数引起来。
-
将以下项添加到本地库路径中。
启动目标 JVM
使用以上选项启动 JVM 后,只有当您执行以下操作时,它才会启动 Java 应用程序。
在连接向导中指定连接设置
如果这是第一次将 Profiler 连接至应用程序,请单击“连接向导”以帮助设定初始连接设置。在将 Profiler 连接至应用程序时,将使用这些设置。如果已指定了连接设置,请转至步骤 4。
- 从主菜单中选择“连接 Profiler”。
- 从“选择性能分析任务”窗口顶部的组合框中选择项目。
- 打开连接向导,并提供有关应用程序类型和位置的详细信息。在向导中,执行以下操作:
- 选择应用程序的位置并执行以下操作:
- 如果位置为“远程”,请提供主机名和主机操作系统。
- 如果位置为“本地”,请选择“直接”连接。
- 检查这些设置,然后单击“下一步”。
- 选择集成类型,然后单击“下一步”。
- 选择目标 JVM,然后单击“下一步”。
- 请阅读说明并执行用于连接 Profiler 的集成步骤。
- 选择应用程序的位置并执行以下操作:
- 单击“完成”关闭连接向导。
现在,这些设置与项目相关联了。如果要更改项目的性能分析设置,请重新使用连接向导。
-
指定要执行的性能分析任务
从可用任务的列表中选择一个性能分析任务。此列表与在 IDE 中分析应用程序时出现的“选择性能分析任务”窗口中的列表相同。
将 Profiler 连接至等待的 JVM
单击“连接”按钮。这将启动 Java 应用程序,并对上面所选的性能分析任务应用分析。
更改性能分析任务
在建立连接并将 Profiler 连接至目标应用程序后,可以对应用程序进行分析,就好像是从 Profiler 中启动应用程序进行分析一样。您可以更改要在目标应用程序上运行的性能分析任务,而无需停止或重新启动应用程序。
在没有中断连接的情况下更改性能分析任务
- 从主菜单中选择“性能分析”>“修改性能分析”(Alt+Shift+F2),
或者在 "Profiler" 窗口中单击“修改性能分析”(
)。 - 选择一个新的性能分析任务并设置任意的性能分析参数。
- 单击“确定”。
Profiler 将在目标应用程序上执行新的分析,而无需启动或停止应用程序。
