JProfiler帮助文档Download

连接问题故障排除


当无法建立分析会话时,首先要查看被分析应用程序或应用服务器的终端输出。对于应用服务器,stderr流通常会写入日志文件。这可能是一个单独的日志文件,而不是应用服务器的主日志文件。例如,Websphere应用服务器会写入一个native_stderr.log文件,其中仅包含stderr输出。根据stderr输出的内容,问题的搜索方向会有所不同:

连接问题

如果stderr包含"Waiting for connection ...",则被分析应用程序的配置是正确的。问题可能与以下问题有关:

  • 您是否忘记在本地机器上的JProfiler GUI中启动"Attach to remote JVM"会话?除非分析代理被配置为立即使用"nowait"选项启动,否则它将等待JProfiler GUI连接后才让VM继续启动。
  • 会话设置中是否正确配置了主机名或IP地址?
  • 您是否配置了错误的通信端口?通信端口与HTTP或其他标准端口号无关,且不得与任何已在使用的端口相同。对于被分析应用程序,通信端口被定义为分析VM参数的一个选项。使用VM参数-agentpath:<path to jprofilerti library>=port=25000,将使用25000端口。
  • 您是否尝试通过仅监听环回接口的直接连接来连接到代理?默认情况下,代理仅监听环回接口。您可以配置JProfiler以设置SSH隧道到远程机器。如果不需要加密,也可以使用address=[IP address]选项用于-agentpath参数。
  • 本地机器和远程机器之间是否有防火墙?可能存在用于传入和传出连接的防火墙,甚至在中间网关机器上也有防火墙。

端口绑定问题

如果stderr包含关于无法绑定socket的错误消息,则端口已在使用中。在这种情况下,请检查以下问题:

  • 您是否多次启动了被分析应用程序?每个被分析的应用程序需要一个单独的通信端口。
  • 是否有以前分析运行的僵尸Java进程阻塞了端口?
  • 是否有其他应用程序正在使用通信端口?

如果stderr中没有以JProfiler>为前缀的行,并且您的应用程序或应用服务器正常启动,则-agentpath:[path to jprofilerti library] VM参数未包含在Java调用中。您应该找出启动脚本中实际执行的Java调用,并在那里添加VM参数。

附加问题

当附加到正在运行的JVM时,有时可能在所有JVM列表中看不到感兴趣的JVM。要找出此问题的原因,了解附加机制的工作原理很重要。当JVM启动时,它会将PID文件写入临时目录中的hsperfdata_$USER目录,从而被发现。只有相同用户或管理员用户才能附加到JVM。JProfiler可以帮助您以管理员用户身份连接到JVM。

在Windows上,使用Show Services按钮显示所有JVM服务进程。JProfiler安装了一个帮助服务,该服务将以系统帐户运行,可以连接到以系统帐户运行的服务以及配置的用户帐户。该服务的名称为"JProfiler helper",当您点击该按钮时安装。您必须确认UAC提示以允许安装服务。当JProfiler退出时,服务将再次卸载。

在Linux上,您可以在附加对话框中使用用户切换器以root帐户附加。此用户切换器在分析本地JVM时以及附加到远程Linux或macOS机器时显示。对于远程附加情况,您还可以切换到不同的非root用户。如果您有root密码,请始终切换到root,而不是运行服务的实际用户。

如果在Linux上即使您认为应该可见的JVM不可见,问题通常与临时目录有关。一种可能性是/tmp/hsperfdata_$USER目录的访问权限错误。在这种情况下,删除目录并重新启动JVM。要附加的进程必须具有对/tmp的写访问权限,否则不支持附加。

如果您使用systemd,您感兴趣的进程可能在其systemd服务文件中设置了PrivateTmp=yes。然后pid文件被写入不同的位置。如果您在附加对话框中使用用户切换器切换到root用户,或者以root身份使用CLI工具,JProfiler将处理此问题。

远程附加的自动代理下载

对于远程附加,JProfiler需要远程目标平台的代理库。如果它们在本地不可用,它将尝试下载它们。如果有防火墙阻止HTTPS连接到https://download.ej-technologies.com或使用中间人方案检查SSL连接以解密流量,则此操作可能会失败。在后一种情况下,HTTPS连接将失败,因为JProfiler没有防火墙的证书。

当发生代理下载错误时,JProfiler提供手动解决方案。会显示一个对话框,显示从网站手动下载代理档案的说明,并在继续远程附加操作之前定位下载的档案。

由于代理文件被缓存,因此对于每个远程平台,这是一项一次性操作。当JProfiler更新时,代理会更改,下载将需要重复。