性能文章>【译】工具:如何使用 JVisualVM 进行故障排查?>

【译】工具:如何使用 JVisualVM 进行故障排查?转载

2年前
388446

几天前,我在一台 Java 服务托管服务器上遇到了问题——服务器负载、资源消耗、服务响应时间过高。

大家的判断是最新的 JAR 部署导致了这个问题,而本地机器上的服务代码和性能看起来还不错。

所以,我们需要最新部署的数据才不会导致这个问题——这就是 JVisualVM 的用武之地了!

什么是 JVisualVM?

这是 JDK 捆绑包中提供的有用的免费实用程序之一。

它基本上是一个 JMX 客户端应用程序。该实用程序显示使用的内存、堆数据、垃圾收集器和 CPU 分析等统计信息。

它可以帮助我们在分析内存泄漏、堆数据和 CPU 消耗后提高应用程序性能

借助线程分析和磁头转储分析等功能,它在解决运行时问题方面也非常方便。

添加 JMX 属性

为了使 JVisualVM 能够收集托管在远程服务器上的应用程序的统计信息,我们必须使用 jmx 系统属性运行我们的应用程序。它们如下:

  • com.sun.management.jmxremote.port 指定应用程序将通过其公开的端口号
  • com.sun.management.jmxremote.ssl 指定是否将激活安全套接字层 (SSL) 加密以保护与应用程序的连接
  • com.sun.management.jmxremote.authenticate 指定连接是否受密码保护

Jar 命令看起来像:

 java -jar -Dcom.sun.management.jmxremote.port=1098 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false my-service.jar

 

在本地机器上运行 JVisualVM

我是 Ubuntu 用户,jvisualvm 可在以下位置获得:

 /usr/lib/jvm/java-8-oracle/bin/jvisualvm 

我们可以在 bash 终端中使用以下命令运行 jvisualVM,如下所示:

该应用程序将按如下方式启动:

创建 SOCKS 代理连接

SOCKS 代理可以由 SOCKS 客户端或 Linux 上的 ssh 实用程序创建。

我们使用以下命令在 localhost 和远程服务器之间创建安全隧道:

ssh -fN -D 1098 my-username@my-remote-server-IP -pXXXX

-f 选项分叉进程和隧道创建命令在后台运行

-N选项告诉 ssh,一旦隧道建立,我们就不会发送任何命令

完全的

-D用于选择监听端口的选项

 -p  远程主机上要连接的端口

系统将询问您设置 SOCKS 代理的密码。

在 JVisualVM 中添加代理设置

使用工具菜单中的以下步骤:

工具->选项->网络-手动代理设置-检查并在本地主机和端口1098配置SOCKS代理

在 JVisualVM 中添加远程主机

使用 JVisualVM 侧栏中的以下步骤。

右键点击远程主机->添加远程主机--输入服务器的IP

注意:我添加了显示名称 myserver 以隐藏 serverIP

添加 JMX 连接

使用以下步骤添加 JMX 连接

右键myserver->输入jmx端口(加1098)

注意:我添加了显示名称 myservice-on-myserver 来隐藏 serverIP。

收集统计数据

现在,我们可以分析收集到的统计信息,如 CPU 使用率、系统属性、详细的线程报告以及访问堆栈跟踪、CPU 采样等。

最终快照如下:

祝:你的 JVisualVM 使用一切顺利!

原文:Vishal Saxena

点赞收藏
一只菌

简简单单,认真生活。

请先登录,查看4条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步
6
4