如何在Linux系统中找出内存和CPU占用高的进程

560 阅读5分钟

一、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 使用时间。

image.png

进程信息:

  • 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:所执行的指令

如下图示例:

image.png

查找指定进程格式:

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

image.png ps aux --sort -pmem

image.png

方法二:

使用ps自有参数--sort进行排序

格式:

--sort=[+|-] key

从SORT KEYS段中选一个多字母键.“+”字符是可选地,因为默认地方向就是按数字升序或者词典顺序.

比如:

按内存升序排列:ps aux --sort=rss 
按CPU降序排列:ps aux --sort=-%cpu

2.2 使用top命令找出内存消耗最大的进程

按进程的内存使用率排序

运行top命令后,键入大写M。

image.png

三、如何在Linux系统中找出CPU占用最高的进程

3.1 使用ps找出占用CPU最高的进程

image.png

sort=-%cpu是对cpu使用率进行降序排序。

image.png

效果是一样的。如果觉得结果太多了不方便观看,可以用head命令指定只看前多少行记录,比如:head -n 10

3.2 使用top找出占用CPU最高的进程

可以直接用top命令,因为默认情况下,top 命令的输出结果按 CPU 占用进行排序,每 5 秒钟更新一次结果。

或者是运行top命令后,键入大写P。效果是一样的。

image.png

上面的命令的各部分解释:

  • top:命令
  • -b:批次档模式
  • head -15:显示输出结果的前 15 个
  • PID:进程的 ID
  • USER:进程的归属者
  • PR:进程的等级
  • NI:进程的 NICE 值
  • VIRT:进程使用的虚拟内存
  • RES:进程使用的物理内存
  • SHR:进程使用的共享内存
  • S:这个值表示进程的状态: S = 睡眠,R = 运行,Z = 僵尸进程
  • %CPU:进程占用的 CPU 比例
  • %MEM:进程使用的 RAM 比例
  • TIME+:进程运行了多长时间
  • COMMAND:进程名字