【学习笔记】启动HSDB并连接到Hotspot进程
一、启动 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\)下。