Java并发编程之查看进程和线程

376 阅读3分钟

前言

在开发中经常需要查看端口、进程和线程的相关信息,下面从三个方面介绍一下常用的命令:

  1. Windows常用命令
  2. Linux常用命令
  3. Java中常用命令

Windows常用命令

Windows中查看进程和端口相关命令主要有tasklisttaskkillnetstat三个,使用时一般都是先通过tasklistnetstat命令找到PID,然后通过taskkill命令杀死进程。

  • tasklist:不加参数默认打印【映像名称、PID、会话名、会话、内存使用】等信息,一般使用这个就够用了;
  • tasklist /V:查看进程详细信息,包括【映像名称、PID、会话名、会话、内存使用、状态、用户名、CPU、时间、窗口标题】,很少用
  • tasklist /SVC:显示每个进程中的服务信息,打印信息包括【映像名称、PID、服务】,很少用
  • taskkill /F /PID [进程ID]:强制杀死指定PID的进程;/F表示强制执行;
  • netstat -ano:查看所有的端口号,打印信息包括【协议、本地地址、外部地址、状态、PID
    • a:显示所有端口号
    • n:以数字形式显示地址和端口号
    • o:显示关联的进程PID

Linux常用命令

Linux中查看进程常用命令有pstopkill

  • ps aux:查看所有进程信息包括USER,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME,COMMAND
    • aall with tty, including other users,显示当前终端下的所有进程信息,包括其他用户的进程。
    • uuser-oriented format,面向用户的格式进行输出
    • xprocesses without controlling ttys,显示没有控制终端的进程
  • ps -ef:查看所有进程信息,打印内容包括UID,PID,PPID,C,STIME,TTY,TIME,CMD
    • -e:和-A一样表示所有进程
    • -ffull-format, including command lines,使用完整格式输出信息,包含命令行
  • top:可以动态监测系统进程信息,和Windows的任务管理器类似
  • kill -9 PID:杀死进程

ps auxps -ef都可以通过管道符查找进程信息,比如ps aux | grep java或者ps -ef | grep java来查找java相关进程信息

Java中常用命令

Java开发中最常用的进程和线程相关的命令是jpsjstackjconsole

  • jps:查看所有Java进程,输出内容为进程ID和启动类简易名称(Test)
  • jps -l:查看所有Java进程,输出内容为进程ID和启动类全类名(com.xxx.xxx.Test
  • jstack 进程ID:查看当前进程的所有线程信息,可以查看线程状态是否死锁;
  • jconsole:可以对本地和远程服务器的中Java进程的内存、线程状态、类以及是否死锁等进行检测

应用场景

  1. 想要杀死某个运行中的Java进程:首先通过jps命令找到该进程的PID,然后通过taskkill或者kill命令杀死进程。
  2. 某个运行中的Java进程卡死:首先通过jps命令找到该进程的PID,然后通过jstack命令查看线程状态是否有sleep或者死锁的线程,定位到具体代码位置进行排查。

tip:一般情况下用到的命令都可以通过-h/-help/--help来查看帮助文档,快速了解用法和每个参数的意义