写点什么

使用 JDK 自带的 jmap 和 jhat 监控处于运行状态的 Java 进程

作者:Jerry Wang
  • 2021 年 12 月 05 日
  • 本文字数:1460 字

    阅读完需:约 5 分钟

使用JDK自带的jmap和jhat监控处于运行状态的Java进程

对于处于运行状态中的 Java 进程,JDK 自带了很多工具,允许 Java 开发人员监控运行进程中的各种状态,比如该进程内部创建了多少个对象实例,消耗了多少内存,等等。



本文基于 JDK1.8 而写成。


我下面写了一个最简单的 Java 类,包含了一个无限循环,每隔 5 秒增加一个计数器的值。


package jmap;class Tool{  private int count = 0;  public void Run() throws InterruptedException{    while(true){      System.out.println("Hello: " + this.count++);      Thread.sleep(5000);    }  }}public class JMapTest {  public static void main(String[] args) throws InterruptedException {    Tool tool = new Tool();    tool.Run();  }}
复制代码


在 Eclipse 里执行这个应用。


下面介绍如何使用 jmap 和 jhat 监控这个运行进程。


1. 首先取得这个 Java 运行进程的 ID:15392。我是直接用 Windows 自带的任务管理器获得进程 ID 的。



2. 使用如下命令行:


jmap -dump:format=b,file=c:\temp\heapstatus.bin 15392


jmap 是 JDK 提供的工具,位于 JDK 安装目录的 bin 文件夹下。



执行命令行,会产生一个 heap dump 文件: headstatus.bin



3. 现在可以用另一个 JDK 工具,jhat 来读取这个 dump 文件并解析。使用命令行:


jhat c:\temp\heapstatus.bin



解析完毕后,jhat 打印出的输出提示我们 Snapshot resolved,可以从本地服务器的 7000 端口来查看。


访问 http://localhost:7000,能看到 jmap 解析结果。


localhost:7000 in browser:



点击超链接“jmap Tool”进入明细:下图意思是我的 Tool 类的实例 @0x7166babd8 的成员变量,即计数器的值已经累加到 49 了。



4. 如果大家不喜欢命令行,也可以用一个 Eclipse 的插件,MAT – Memory Analyzer Tool,也能完成和 jmap 与 jhat 命令同样的功能。



这个插件安装后,在 Eclipse 里会多出一个视图:



直接将 jmap 生成的 heap dump 文件拖到 MAT 视图里,就能自动解析并显示结果了。


点按钮“Find object by address”:



同样能够看到之前在 localhost:7000 里看到的对象实例的明细:


You can get the same result as you get previously in



这张图每位程序员应该都深有感触。


人民心目中的程序员是这样的:坐在电脑面前噼里啪啦敲着键盘,运键如飞。



现实中程序员是这样的:编码 5 分钟,调试两小时。



今天我要给大家分享一个用 WebGL 开发的网站,感兴趣的朋友可以在 Chrome 开发者工具里调试它的源码来学习 WebGL。


WebGL(Web Graphics Library)是 3D 绘图协议的一种,该技术的特色是将万能的 JavaScript 和 OpenGL ES 2.0 结合在一起,为 HTML5 的 Canvas 提供硬件 3D 加速渲染。借助 WebGL,前端开发人员可以开发出非常专业的 3D 场景和模型。


今天我要介绍的网站:Legacy Encom Boardroom Visualization 就是一个采取 JavaScript 加上 WebGL 开发 3D 场景和模型的一个典型例子。


网站地址:https://www.robscanlon.com/encom-boardroom/


进入之后,会看到一个炫目的控制台。左下角的动画效果很像电影《生化危机》里的 DNA 双螺旋模型。屏幕右边是一个控制台,你在键盘上输入的字符会有个酷炫的动画效果:



您可以手动在控制台里输入 shell 命令,比如:


cd wikipedia


ls


以此来浏览 wikipedia 文件夹下的所有内容。或者直接用鼠标左键点击 wikipedia 这个文件夹:



然后就能进入 wikipedia 这个文件夹,看到几个酷炫的 3D 模型,一个是正在旋转的地球的 3D 模型,另一个是不同维度展示的长方体模型。




在 Chrome 开发者工具的 console 页面能看到 WebGL 相关的输出。



这个网站的源码在 github:http://github.com/arscan/encom-boardroom


如果大家对 WebGL 技术感兴趣的,不妨去细读下源代码:



要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙".

发布于: 3 小时前阅读数: 5
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
使用JDK自带的jmap和jhat监控处于运行状态的Java进程