1 查看进程ps
1.1 根据端口查看:lsof -i:端口号
1.2 直接查看:ps [option],其中:option包含a、u、x、-l、-e五大参数:
(1)a 显示一个终端的所有进程
(2)x 显示没有控制终端的进程
(3)u 显示进程的归属用户以及内存的使用情况
(4)-e 显示所有进程
(5)-f 完整格式
ps命令可用格式很多,但是常用的只有三种:
如果查看进程的CPU使用率和内存占用率,使用ps aux
如果查看PPID和完整的CMD命令,使用ps -ef
其中,ps aux的输出为:
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID。 |
%CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
TTY | 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。 |
STAT | 进程状态。常见的状态有以下几种:
|
START | 该进程的启动时间。 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
COMMAND | 产生此进程的命令名。 |
ps -ef的输出为:
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
STIME
|
该进程的启动时间
|
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
2 进程挂起
进程挂起两种情况,一种是终端挂起(&),一种是后台挂起(nohup)。
(1)当在前台运行某个应用时,终端默认被该作业占据,此时无法用终端进行其他操作。为了可以继续使用终端,可将应用放在后台执行,为此只需要在命令后面加上&即可实现后台运行。
(2)使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一旦把当前控制台关掉(退出账户时),作业就会停止运行。有时为了防止一些误操作导致的当前终端的关闭从而直接导致的后台应用的关闭,可用nohup命令保证后台应用开启后一直执行(即使退出控制台依然执行)。nohup就是不挂起的意思,该命令的一般形式为:nohup command &
3 进程kill
kill的作用是向某个指定的进程发出信号,从而结束该进程。具体的有两种方式,即:kill pid/kill -15 pid和kill -9 pid。
kill pid的作用是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。kill -9 pid是向进程号为pid的应用程序发送SIGKILL信号,该信号不能被应用程序捕获也不能被阻塞和忽略,其动作是立即结束进程。通俗地说,应用程序在毫无感知的情况下,就被收到SIGKILL信号的OS给干掉了。显然,在这种暴力情况下,应用程序完全没有释放占用当前资源的机会。
需要注意的是:有的进程是直接和端口相关联的,对于这种情况,只要kill该进程就会释放关联的端口。
4 进程运行问题跟踪
进程运行有时出现运行等待导致我们无法判断的情况,可借助工具java jstack。
4.1 功能
jstack是作为java虚拟机自带的一种堆栈跟踪工具,主要目的是定位线程出现长时间停顿的原因。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而轻松知道java程序是如何崩溃和在程序何处发生问题的。
4.2 格式
jstack ${PID}