JProfiler帮助文档

连接问题故障排除


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

连接问题

如果标准错误包含"Waiting for connection ..." ,则说明应用程序的配置是正确的。 那么问题可能与以下问题有关:

  • 你是否忘记在本地机器上的JProfiler GUI中启动"Attach到远程JVM"会话? 除非分析代理被配置为使用"nowait"选项立即启动, 否则它将等待JProfiler GUI连接后才让VM继续启动。
  • 在会话设置中是否正确配置了主机名或IP地址?
  • 你是否配置了错误的通信端口?通信端口与HTTP或其他标准端口号无关,且不得与任何已在使用的端口相同。 对于分析的应用程序,通信端口被定义为分析VM参数的一个选项。 对于VM参数-agentpath:<jprofilerti库路径>=port=25000 ,将使用25000端口。
  • 本地机器和远程机器之间是否有防火墙?可能有传入和传出连接的防火墙规则配置,或者中间的网关机上有防火墙。

端口绑定问题

如果标准错误中包含关于无法绑定Socket的错误信息,则说明该端口已经在使用中。 在这种情况下,请检查以下问题:

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

如果标准错误中没有以JProfiler> 为前缀的行,而你的应用程序或应用程序服务器正常启动, 则-agentpath:[jprofilerti库路径]VM 参数没有被包含在 Java 调用中。 你应该找出你的启动脚本中实际执行的是哪个java调用,并为其添加VM参数。

Attach问题

当要Attach到一个正在运行的JVM时,有时可能在所有JVM列表中看不到你所感兴趣的那个JVM。找到引起这个问题的原因,对于理解 Attach的工作机制非常重要。当JVM启动时,它会将一个PID文件写入到临时文件夹中的hsperfdata_$USER目录下, 通过这个临时目录可以发现JVM。然后只有相同用户或管理员用户可以Attach到该JVM。JProfiler可以帮助你以管理员用户连接到一个JVM。

在Windows上,使用显示服务按钮显示所有JVM服务进程。JProfiler安装一个帮助服务,该服务将以系统账户运行, 它可以连接到以系统账户以及已配置的用户账户运行的服务。这个服务叫做“JProfiler助手”,当你点击该按钮时,就会被安装。你必须确认 UAC提示以允许安装该服务。当JProfiler退出时,这个服务会被再次卸载。

在Linux上,你可以使用Attach对话窗口中的用户切换器切换到root账户。当你分析一个本地JVM以及Attach一个远程Linux或macOS机器时, 会显示这个用户切换器。对于远程Attach的情况,你也可以切换到一个不同的非root用户。如果你拥有root密码,那么你应该总是切换到root, 而不是运行服务的实际用户。

如果在Linux上,一个你认为应该被显示的JVM没有显示,这个问题通常和临时目录有关。有可能是/tmp/hsperfdata_$USER 目录访问权限的问题。在这种情况下,你可以删除该目录,然后重启JVM。被Attach的进程必须对/tmp目录有写入权限,否则的话无法Attach。

如果你使用了systemd你感兴趣的进程有可能在其systemd服务文件中设置了PrivateTmp=yes。 那么,PID文件会被写入到一个不同的位置。如果你使用Attach对话窗口中的用户切换器切换到root用户,或以root用户使用CLI工具, JProfiler将处理这些。