动态监控进程

注意
本文最后更新于 2023-11-28,文中内容可能已过时。

动态监控进程

top

topps命令很相似。它们都用来显示正在执行的进程。topps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。

Linux top 命令用于实时显示 process 的动态。类似于 Windows 的任务管理器

top 命令的参数不多,真正好用的是它的交互菜单,一般我们不带参数直接使用top命令

……

现在我们来逐行分析页面中的信息

前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

  • 17:15:44 — 当前系统时间

  • up 49 min— 系统已经运行了 49 分钟(在这期间系统没有重启过)

  • 2 users — 当前有 2 个用户登录系统

  • load average: 0.00, 0.01, 0.05 — load average 后面的三个数分别是 1 分钟、5 分钟、15 分钟的负载情况。

  • load average 数据是每隔 5 秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑 CPU 的数量,结果高于 5 的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有 178 个进程,其中处于运行中的有 1 个,177 个在休眠(sleep),stoped 状态的有 0 个,zombie 状态(僵尸进程,进程已经死掉,但是内存空间没有释放)的有 0 个。

第三行,CPU 状态信息,

具体属性说明如下:

  • 0.0% us — user 用户空间占用 CPU 的百分比。

  • 0.1% sy — system 内核空间占用 CPU 的百分比。

  • 0.0% ni — nice 改变过优先级的进程占用 CPU 的百分比

  • 99.9% id — idle 空闲 CPU 百分比

  • 0.0% wa — IO 等待占用 CPU 的百分比

  • 0.0% hi — 硬中断(Hardware IRQ)占用 CPU 的百分比

  • 0.0% si — 软中断(Software Interrupts)占用 CPU 的百分比

备注:在这里 CPU 的使用比率和 windows 概念不同,需要理解 linux 系统用户空间和内核空间的相关知识!

此外,这里的指标展示的是所有 CPU 的平均值。按数字 1,可以展示每一个 CPU 的情况:

可以看到当前系统有 8 个核心,如果是用虚拟机创建的系统,那么这跟我们在确定虚拟机硬件的时候选择的 CPU 核心数应该是一样的。

第四行,内存状态,单位是字节(Kbyte),具体信息如下:

  • 4026384 total — 物理内存总量(3.8GB)

  • 392340 used — 使用中的内存总量(383M)

  • 3197800 free — 空闲内存总量(3GB)

  • 436244 buffers — 缓存的内存量(426M)

第五行,swap 交换分区信息(Kbyte),具体信息说明如下:

  • 2097148 total — 交换区总量(2GB)

  • 0 used — 使用的交换区总量(0K)

  • 2097148 free — 空闲交换区总量(2GB)

  • 0 cached — 缓冲的交换区总量(0GB)

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到 free 中去,因此在 linux 上 free 内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的 free + 第四行的 buffers + 第五行的 cached,按这个公式此台服务器的可用内存:436244 +3197800 +392340 = 3.8GB 左右。

对于内存监控,在 top 里我们要时刻监控第五行 swap 交换分区的 used,如果这个数值在不断的变化,说明内核在不断进行内存和 swap 的数据交换,这是真正的内存不够用了

第六行,空行。

前 5 行,统计信息区显示完毕,接下来开始显示进程信息

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

  • 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 — 进程名称(命令名/命令行)

重点关注字段: RES%MEM%CPU

交互式菜单

按 h 进入帮助菜单

功能菜单:

  • Sihft + V:切换视图,是树形图,还是列表,感觉还是列表直观些。

  • i:切换显示所有进程还是隐藏闲置或者僵死进程

  • z:切换配色风格

  • d:设置更新时间,默认 3 秒

  • n:只显示多少行进程

  • Shift + <Shift + >:翻页

  • Shift + l(L 的小写):高亮特定字段,查询字段

  • u 按用户进行筛选

  • Shift +P:直接以 cpu 进行排序,常用

  • Shift +M:以内存使用率进行排序,常用

  • Shift +N:以 PID 进行排序

  • Shift +T:以 PID 根据时间/累计时间进行排序

  • f:按 f 进入字段管理,选择任何一个字段,按 d 控制显隐,按 s 控制是否以其排序,只能设置一个排序字段

  • Sihft + R:切换正序倒序排序

  • x:切换是否高亮排序列

  • Sihft + J:切换数字对齐方式,左对齐或者右对齐

  • j:切换文字对齐方式,左对齐或者右对齐

  • c:切换 cmd 命令名称还是 cmd 详情

  • k:输入进程 ID 杀死进程

  • m:切换统计信息区的第四行和第五行的内存信息的显示内容

  • q:退出

top 常用参数

  • -H:指示top显示单个线程。如果没有这个命令行选项,将显示每个进程中所有线程的总和。稍后,可以使用H交互式命令更改此设置。

  • -p:仅监控具有指定进程号的进程,进程 ID 可以指定多个。最多可以指定 20 次,或者您可以提供一个以逗号分隔的列表,最多可以使用 20 个 pid。允许将两种方法混合使用。此时,pid 那一列展示的是线程 id(注意,这个线程 id 是十进制的,但是在 Java 虚拟机中,线程 id 都是 16 进制的,以 0x 开头,因此,我们需要通过 echo "obase=16;number" | bc 来讲十进制数转化为 16 进制数)

常用 top -Hp pid 来查看指定 pid 下的所有线程。这样我们看到哪个线程占用 CPU 或者内存最高,然后通过打印调用栈定位到代码。解决问题。

top 命令结果分析

TODO

0%