【学习笔记】启动HSDB并连接到Hotspot进程

学习文档:Windows10上启动HSDB并查看运行时数据 #50

一、启动 HSDB

Windows

在桌面上新建文本格式的 hsdb.bat 文件,然后双击启动该程序:

java -cp %JAVA_HOME%\lib\sa-jdi.jar sun.jvm.hotspot.HSDB

Ubuntu

~ 用户目录创建文件 Makefile,如果有的话就不要重复创建。在文件中追加以下内容:

hsdb:
	sudo java -cp ${JAVA_HOME}/lib/sa-jdi.jar sun.jvm.hotspot.HSDB

~ 用户目录执行 make hsdb 命令,可能会出现以下错误:

No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':10.0' as the value of the DISPLAY variable.

我在 bing.com 搜索 “启动hsdb No protocol specified”,然后找到一些资料。

如果执行 xhost + 以下结果,表示正确:

geekziyu@ubuntu-1:~$ xhost +
access control disabled, clients can connect from any host

然后,我照着网上说的,执行 export DISPLAY=:1 或者 export DISPLAY=localhost:1,再执行 xhost + 出现错误

geekziyu@ubuntu-1:~$ export DISPLAY=localhost:1
geekziyu@ubuntu-1:~$ xhost +
xhost: unable to open display "localhost:1"
geekziyu@ubuntu-1:~$ export DISPLAY=:1
geekziyu@ubuntu-1:~$ xhost +
xhost: unable to open display ":1"

最后,我又重新设置了第一次启动hsdb报错时的值:10.0 ,然后莫名其妙地就好了

geekziyu@ubuntu-1:~$ export DISPLAY=:10.0
geekziyu@ubuntu-1:~$ xhost +
access control disabled, clients can connect from any host
geekziyu@ubuntu-1:~$ make hsdb

我说不出为什么,反正就是很奇怪。

二、让你的程序运行后死循环或者阻塞

常见的手段,在Java的main函数最后一行加一句代码

  • 或者 System.in.read();
  • 或者 Thread.sleep(Integer.MAX_VALUE);
  • 或者 while (true);

接着,IDEA中运行main方法,启动上面的进程。

然后,命令行中输入 jps 查看 JVM 进程:

三、连接到Hotspot进程

打开HSDB界面,左上角点击File > Attach to Hotspot process,输入12988,点击OK或回车

如果遇到 Attach Processing 一直卡的情况,并且打开 HSDB 的命令行出现类似

java.lang.UnsatisfiedLinkError: Can't load library:D:\Common\Java\jre1.8.0_131\bin\sawindbg.dll

这样的错误,则需要从 JDK 的安装路径下\jre\bin(比如我的是 D:\Common\Java\jdk1.8.0_131\jre\bin)拷贝 sawindbg.dll 文件到出错目录(比如我的是D:\Common\Java\jre1.8.0_131\bin\)下。

参考文档:HSDB时,关于解决UnsatisfiedLinkError sawindbg.dll的问题笔记

posted @ 2022-08-01 11:53  极客子羽  阅读(421)  评论(0编辑  收藏  举报