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.html3、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类