一、top和ps命令的使用
我们经常需要在排查故障时找出Linux系统中CPU或者内存占用高的进程,此时需要列出系统中 CPU 或MEM占用高的进程列表来确定。通常来说只有两种方法能实现:使用 top 命令 和 ps 命令。这两个命令的效果差不多,ps是静态的某一时刻的快照,而top是动态的,所以我个人更倾向于使用top,这是个人喜好。下面先来简单了解一下这两个命令的使用和参数列表。
1、top命令
Linux top 是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。
参数说明:
-d <秒数>
:指定 top 命令的刷新时间间隔,单位为秒。-n <次数>
:指定 top 命令运行的次数后自动退出。-p <进程ID>
:仅显示指定进程ID的信息。-u <用户名>
:仅显示指定用户名的进程信息。-H
:在进程信息中显示线程详细信息。-i
:不显示闲置(idle)或无用的进程。-b
:以批处理(batch)模式运行,直接将结果输出到文件。-c
:显示完整的命令行而不截断。-S
:累计显示进程的 CPU 使用时间。
进程信息:
- PID:进程的标识符。
- USER:运行进程的用户名。
- PR(优先级):进程的优先级。
- NI(Nice值):进程的优先级调整值。
- VIRT(虚拟内存):进程使用的虚拟内存大小。
- RES(常驻内存):进程实际使用的物理内存大小。
- SHR(共享内存):进程共享的内存大小。
- %CPU:进程占用 CPU 的使用率。
- %MEM:进程占用内存的使用率。
- TIME+:进程的累计 CPU 时间。
功能和交互操作:
- 按键命令:在 top 运行时可以使用一些按键命令进行操作,如按下 "k" 可以终止一个进程,按下 "h" 可以显示帮助信息等。
- 排序:可以按照 CPU 使用率、内存使用率、进程 ID 等对进程进行排序。
- 刷新频率:可以设置 top 的刷新频率,以便动态查看系统信息。
2、ps命令
ps
命令用于报告当前进程的快照。ps
命令的意思是“进程状态”。这是一个标准的 Linux 应用程序,用于查找有关在 Linux 系统上运行进程的信息。
它用于列出当前正在运行的进程及其进程 ID(PID)、进程所有者名称、进程优先级(PR)以及正在运行的命令的绝对路径等。
参数:
-
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-
-A 列出所有的进程
-
-w 显示加宽可以显示较多的资讯
-
-au 显示较详细的资讯
-
-aux 显示所有包含其他使用者的进程
-
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-
USER: 行程拥有者
-
PID: pid
-
%CPU: 占用的 CPU 使用率
-
%MEM: 占用的记忆体使用率
-
VSZ: 占用的虚拟记忆体大小
-
RSS: 占用的记忆体大小
-
TTY: 终端的次要装置号码 (minor device number of tty)
-
STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
-
START: 行程开始时间
-
TIME: 执行的时间
-
COMMAND:所执行的指令
-
如下图示例:
查找指定进程格式:
ps -ef | grep 进程关键字
二、如何在 Linux 中找出内存消耗最大的进程
2.1 使用ps命令找出内存消耗最大的进程
下面的 ps
命令格式为你提供有关内存消耗最大进程的更多信息。
ps命令可以和sort命令结合起来使用,大致用法如下:
方法一:
ps + sort
ps , -e 是显示所有进程, -o是定制显示信息的格式
rss: resident set size, 表示进程占用RAM(内存)的大小,单位是KB
pmem: %M, 占用内存的百分比
pcpu: %C,占用cpu的百分比
vsize: 表示进程占用的虚拟内存的大小,KB
args:进程名(command)
sort命令对ps结果进行排序
-k 1 :按第一个参数 rss进行排
-r:逆序
-n:numeric,按数字来排序
比如:
ps aux --sort -rss
ps aux --sort -pmem
方法二:
使用ps自有参数--sort进行排序
格式:
--sort=[+|-] key
从SORT KEYS段中选一个多字母键.“+”字符是可选地,因为默认地方向就是按数字升序或者词典顺序.
比如:
按内存升序排列:ps aux --sort=rss
按CPU降序排列:ps aux --sort=-%cpu
2.2 使用top命令找出内存消耗最大的进程
按进程的内存使用率排序
运行top命令后,键入大写M。
三、如何在Linux系统中找出CPU占用最高的进程
3.1 使用ps找出占用CPU最高的进程
sort=-%cpu是对cpu使用率进行降序排序。
效果是一样的。如果觉得结果太多了不方便观看,可以用head命令指定只看前多少行记录,比如:head -n 10
3.2 使用top找出占用CPU最高的进程
可以直接用top命令,因为默认情况下,top
命令的输出结果按 CPU 占用进行排序,每 5 秒钟更新一次结果。
或者是运行top命令后,键入大写P。效果是一样的。
上面的命令的各部分解释:
top
:命令-b
:批次档模式head -15
:显示输出结果的前 15 个PID
:进程的 IDUSER
:进程的归属者PR
:进程的等级NI
:进程的 NICE 值VIRT
:进程使用的虚拟内存RES
:进程使用的物理内存SHR
:进程使用的共享内存S
:这个值表示进程的状态:S
= 睡眠,R
= 运行,Z
= 僵尸进程%CPU
:进程占用的 CPU 比例%MEM
:进程使用的 RAM 比例TIME+
:进程运行了多长时间COMMAND
:进程名字