linux环境下随时照看服务器进程的ps和top命令

前言

在linux环境服务器下通常是不会安装图形界面的,这时如果想看程序是否在正常运行着,就不能像在windows上一样去查看任务管理器,而是需要通过命令来查询程序的进程运行情况,ps 就是一个查询linux环境下进程运行状态的命令,请注意这个可不是我们P图用的那个工具哦。

ps命令

ps 命令在man手册中描述是 “report a snapshot of the current processes”,其实它的作用就是上报程序运行时的一个快照。

ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1) instead.

man手册中的这句话也很好理解,ps 命令执行一次就会显示一次所选进程的信息,若想重复刷新显示所选进程的信息,可以使用 top 命令,从作用上来看,可以简单理解为 top 命令是一个反复执行的 ps 命令。

语法格式

1
ps [options]

ps 命令的格式很简单,但是为什么感觉同一个查询进程的需求,每个人写出来的命令都不太一样呢?其实这是因为有好几种语法规范,无论怎么写都可以,甚至交叉混合的写命令都是能识别的,比如最常见的查询所有进程有些人会写成 ps -ef,而有的人会写成 ps aux,这两种都是可以的。

语法规范

ps -ef 是使用了UNIX选项,是一种标准语法,而 ps aux使用了BSD选项,是一种BSD语法,另外还有一种加两个短横线的写法,例如 ps --pid 3678,这是一种GNU长选项。

常用的ps选项

  1. 显示所有的进程,一般搭配grep使用
1
ps aux | grep processname
  1. 显示指定的列,可以使用 -eo 来指列名,我最常用的 cmd 是启动时的命令,lstart 是启动时的时间
1
2
[root@VM-0-3-centos ~]# ps -eo cmd,lstart | grep sshd
usr/sbin/sshd -D Tue Feb 9 11:13:55 2021
  1. 以树形结构显示进程
1
ps -axjf
  1. 查询指定用户的进程
1
ps -fu root
  1. 按cpu使用率降序排序
1
ps -aux --sort -pcpu
  1. 按内存使用率降序排序
1
ps -aux --sort +pmem

ps命令的表头

1
2
3
4
5
6
7
8
9
10
11
[root@VM-0-3-centos ~]# ps -aux --sort -pcpu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 17444 0.4 3.7 994796 71276 ? Sl 2021 181:54 /usr/local/qcloud/YunJing/YDEyes/YDService
root 8572 0.3 0.7 614824 14416 ? Sl Jan20 21:35 barad_agent
root 1 0.0 0.1 191084 3336 ? Ss 2021 76:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 2021 0:09 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 2021 0:00 [kworker/0:0H]
root 1063 0.0 0.0 110208 792 tty1 Ss+ 2021 0:00 /sbin/agetty --noclear tty1 linux
root 1064 0.0 0.0 110208 772 ttyS0 Ss+ 2021 0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
root 2388 0.0 0.1 157696 1952 pts/0 R+ 00:27 0:00 ps -aux --sort -pcpu
root 6 0.0 0.0 0 0 ? S 2021 13:09 [ksoftirqd/0]

执行 ps 命令通常有以上几列:USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND

USER:进程所属用户名
PID:进程ID
%CPU:进程CPU使用率,注意所有CPU使用率加起来可以超过100%,如果有4个CPU,在不考虑多核的情况下,最大应该为400%
%MEM:进程内存使用率,可以配合 free -h 命令使用
VSZ:进程使用的虚拟内存量
RSS:进程占用的固定内存量
TTY:进程在哪个终端上运行,若与终端无关,则显示 ?
STAT:进程启动的时间
START:进程状态,是一个组合值,每个符号有单独含义,见下文
TIME:进程使用CPU运行的时间
COMMAND:启动进程时执行的命令的名称和参数

进程状态

这一部分是要是对man手册的翻译内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S")
will display to describe the state of a process:

D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped by job control signal
t stopped by debugger during the tracing
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent

For BSD formats and when the stat keyword is used, additional characters may be displayed:

< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group

常规状态码

D: 无法中断的休眠状态(通常 IO 的进程)
R: 正在运行可中在队列中可过行的;
S: 处于休眠状态
T: 停止或被追踪
W: 进入内存交换(从内核2.6开始无效)
X: 死掉的进程(基本很少见)
Z: 僵尸进程,想杀死通常需要重启系统

BSD格式状态码

<: 优先级高的进程
N: 优先级较低的进程
L: 有些页被锁进内存
s: 一个会话进程的领导者(在它之下有子进程)
l: 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+: 位于后台的进程组

进程相关的后续命令

  1. 查询进程的可执行文件所在位置
1
cat /proc/进程id
  1. 按进程名查询进程id
1
pidof 进程名

top命令

语法格式

1
top [options]

top 命令的man手册巨长,它的作用是动态显示进程状态,实际上就是一份份静态数据间隔显示而已,虽然他也有很多参数,但是通常仅使用一个 top 命令即可。

常用的top选项和快捷键

  1. 显示top帮助
1
top -hV
  1. 按照CPU使用率排序

运行top命令后,输入大写字母P,也就是按快捷键 ctrl+p

  1. 按照内存使用率排序

运行top命令后,输入大写字母M,也就是按快捷键 ctrl+m

  1. 展开多核cpu显示

运行top命令后,输入数字1

  1. 切换显示命令名称和完整命令行

运行top命令后,输入小写字母c

  1. 切换显示平均负载和启动时间信息

运行top命令后,输入小写字母l

top命令的表头

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@VM-0-3-centos ~]# top

top - 00:07:35 up 0 min, 0 users, load average: 0.52, 0.58, 0.59
Tasks: 4 total, 1 running, 3 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.4 us, 8.0 sy, 0.0 ni, 88.4 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
KiB Mem : 8248540 total, 3284196 free, 4727868 used, 236476 buff/cache
KiB Swap: 13107196 total, 13080444 free, 26752 used. 3379816 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8940 316 272 S 0.0 0.0 0:00.15 init
10 root 20 0 8940 224 176 S 0.0 0.0 0:00.00 init
11 albert 20 0 15024 3568 3468 S 0.0 0.0 0:00.24 bash
38 albert 20 0 15900 1960 1420 R 0.0 0.0 0:00.04 top

执行 top 命令后默认有这些列 PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND,它们的含义分表是:

PID:进程id
USER:进程所有者用户名
PR:优先级
NI:NICE值.负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RES
RES:进程使用的未被换出的物理内存大小,单位KB,RES=CODE+DATA
SHR:共享内存大小,单位KB,
S:进程状态,D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
%CPU:CPU使用百分比
%MEM、内存使用百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:启动命令

总结

  • 显示所有进程可以使用 ps -ef 或者 ps aux,他们通常是后续过滤的第一步
  • 按cpu使用率降序排序使用 ps aux --sort -pcpu,按内存使用率降序排序使用 ps aux --sort +pmem
  • top 命令结果的第一行是整体信息,包括了当前时间,系统已运行时间,登录用户数,系统负载等信息
  • top 命令中按大写字母 P 会按照CPU排序,按大写字母 M 会按照内存排序

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

小孩子才有对错,长大了都是利益。做选择的本质是分类,权衡利弊的过程是分类,趋利避害的行事生活更是分类,所以遇到选择我们才要考虑方方面面,因为这样我们才有足够的理由来把它归为有利的一类,还是有害的一类~

2022-1-28 00:41:05

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客