天天看点

如何查看Java进程和线程

1、Windows

通过任务管理器查看进程信息

在进程页签中查看Java进程,我是idea启动,因此可以在idea下查看相关进程

如何查看Java进程和线程

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

如何查看Java进程和线程

通过控制台查看进程信息

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

如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

taskkill 杀死进程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

2、Linux

ps -ef 命令查看

Linux下可以通过ps -ef查看所有进程信息,具体参数说明如果不知道的可以看看菜鸟网站的简单介绍,如下链接可以直达。

https://www.runoob.com/linux/linux-comm-ps.html
如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

kill 杀死进程

使用kill 进程id,杀死进程

如何查看Java进程和线程

top 命令查看

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

如何查看Java进程和线程

查看指定进程的信息,使用top -p 进程id,查看指定进程下的所有线程信息,可以使用top -H -p 进程id

具体参数描述可以参考下菜鸟网站的简单介绍,如下链接可以直达。

https://www.runoob.com/linux/linux-comm-top.html
如何查看Java进程和线程

3、Java自带工具

jps 查看进程id

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

如何查看Java进程和线程

jstack 查看进程中的线程状态

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

信息比较多并未展示完全

如何查看Java进程和线程
如何查看Java进程和线程

jconsole 图形化界面

jconsole是jdk自带的监控内存、线程、类等资源情况的图形化界面。

在windows 环境下,可以直接双击运行jdk安装目录bin文件夹下的jconsole.exe文件

如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

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

如何查看Java进程和线程

远程连接需要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类