如何查看 Java 进程和线程
1、Windows
通过任务管理器查看进程信息
在进程页签中查看 Java 进程,我是 idea 启动,因此可以在 idea 下查看相关进程

此外可以在详细信息页签下 Ctrl+f 搜索 java

通过控制台查看进程信息
进入 CMD,键入 tasklist,可以查看所有的进程信息,包括进程 ID、内存使用情况

查看 Java 相关的进程,可以添加过滤条件 tasklist | findstr "java" ,需要注意 windows 中字符串需要使用双引号,要不就不加也是可以的

如果是在 IDEA 中启动程序,可以借用 idea 的 Terminal 终端执行命令

taskkill 杀死进程
杀死进程使用 taskkill /pid 指定进程 id,如果无法杀死,可以尝试强制杀死 taskkill /pid 进程 id -t -f

可以看到 idea 控制台中进程已结束

通过 tasklist | findstr 进程 id 已经无法查询到该进程,说明进程终止成功

2、Linux
ps -ef 命令查看
Linux 下可以通过 ps -ef 查看所有进程信息,具体参数说明如果不知道的可以看看菜鸟网站的简单介绍,如下链接可以直达。
https://www.runoob.com/linux/linux-comm-ps.html

提供一个测试 Java 类,为防止线程运行结束,代码中使用了 while(true)循环,同时防止完全占用 CPU,使用 TimeUnit.SECONDS.sleep(2)睡眠 2 秒,让出 CPU 执行时间。

通过 javac ThreadDemo2.java 编译 ThreadDemo2.java 类,生成对应的 class 文件-ThreadDemo2.class;之后通过 java -cp / com.lzb.concurrency.demo1.ThreadDemo2 运行

查看 ThreadDemo2 的进程信息 ps -ef | grep ThreadDemo2(注意需要新开一个 Shell 窗口)

kill 杀死进程
使用 kill 进程 id,杀死进程

top 命令查看
查看所有进程信息,可以使用 top 命令

查看指定进程的信息,使用 top -p 进程 id,查看指定进程下的所有线程信息,可以使用 top -H -p 进程 id
具体参数描述可以参考下菜鸟网站的简单介绍,如下链接可以直达。
https://www.runoob.com/linux/linux-comm-top.html

3、Java 自带工具
jps 查看进程 id
Java 自带的命令就不区分平台了,如果需要查看所有的 Java 进程 id,可以使用 jps

jstack 查看进程中的线程状态
查看某个 Java 进程的线程状态,可以结合 jps 一起使用,先通过 jps 查询进程的 id,然后通过 jstack 查询进程中的所有线程的状态,需要注意的是 jstack 查询的线程状态,是该进程在查询时刻的线程状态(瞬时态)
信息比较多并未展示完全


jconsole 图形化界面
jconsole 是 jdk 自带的监控内存、线程、类等资源情况的图形化界面。
在 windows 环境下,可以直接双击运行 jdk 安装目录 bin 文件夹下的 jconsole.exe 文件

如果是本地 Java 进程,可以勾选本地进程,然后再本地进程中找到你的 Java 进程,选中后点击连接即可

本地连接不需要密码验证,选择不安全连接即可,如下即为 jconsole 的界面

如果 java 进程运行在远程 Linux 服务器上,则需要使用远程连接

远程连接需要 ip port username password 等信息,此时我们需要使用如下方式运行 Java 类
java -Djava.rmi.server.hostname='ip 地址' -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port='端口' -Dcom.sun.management.jmxremote.ssl=是否安全连接 -Dcom.
sun.management.jmxremote.authenticate=是否需要认证 java 类
版权声明: 本文为 InfoQ 作者【李子捌】的原创文章。
原文链接:【http://xie.infoq.cn/article/08e628facc16edc81c18afea2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论