最近在使用jps及jstack指令时,遇到一个问题。
文章目录
- 问题描述
- 1. 使用eclipse启动一个死锁的进程
- 2. 打开cmd
- 3. 执行指令
- 分析过程
- 1. 如何查看进程是多少位的?
- 修改方法
问题描述
1. 使用eclipse启动一个死锁的进程
public class DeadThread {public static void main(String[] args) {final Object A = new Object();final Object B = new Object();new Thread(() -> {synchronized (A) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (B) {}}}).start();new Thread(() -> {synchronized (B) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (A) {}}}).start();}
}
2. 打开cmd
输入jps -l
,
C:\Users\***>jps -l
4912 com.zte.ums.LoaderMain
5124
13704 com.hzq.myapp.thread.DeadThread
14152 sun.tools.jps.Jps
6520
3. 执行指令
jstack 13704
,报错:
Unable to attach to 32-bit process running under WOW64
错误提示说该进程是32bit位的,但是我们环境变量配置的是64位的JDK
,所以导致执行该指令出问题了。
C:\Users\***>java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
分析过程
1. 如何查看进程是多少位的?
打开任务管理器,找到PID
为13704的进程
红框中的为命令行
选中该进程,右键 --> 打开文件位置
这里的zulu64目录层,是我修改后的结果。在该目录下,打开cmd
,执行java -version
,可以看到使用的是多少位的JVM
。当然,在进程状态那里,也可以看到
修改方法
既然已经知道了进程是32位的,那么只需要将eclipse
配置64位的JDK
,启动64位进程即可。下图是配完后的结果:
可以到Location
指向的目录,执行java -version
,查看配置的是多少位的JDK
。