- top示例:查询结果字段解释
1. 第一行信息为任务队列信息:
内容举例 | 说明 |
14:12:01 | 系统当前时间 |
up 6:04 | 系统的运行时间,前面例子表示本机已经运行6小时4分钟 |
2 users | 当前登录了2个用户 |
load average:0.00, 0.02, 0.05 | 系统在之前1分钟,5分钟,15分钟的平均负载。 一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。 |
2. 第二行为进程信息:
内容举例 | 说明 |
Tasks: 210 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
209 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
3. 第三行为 CPU 信息:
内容举例 | 说明 |
Cpu(s):3.0%us | 用户空间占用的CPU百分比,us对应user |
3.0%sy | 内核空间占用的CPU百分比,sy对应system |
0.0%ni | 改变过优先级的进程占用的CPU百分比,ni对应niced |
93.9%id | 空闲CPU的CPU百分比 |
0.1%wa | 等待输入/输出的进程的占用CPU百分比,wa对应IO wait |
0.0%hi | 硬中断请求服务占用的CPU百分比,hi对应hardware IRQ |
0.0%si | 软中断请求服务占用的CPU百分比,si对应software IRQ |
0.0%st | st(Steal time)虚拟时间百分比,也叫被hypervisor偷走的时间。 就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。 |
4. 第四行为物理内存信息:
内容举例 | 说明 |
3861295 total | 物理内存的总量,单位KB |
1037800 free | 空闲的物理内存数量 |
943564 used | 已经使用的物理内存数量 |
1879928 buff/cache | 作为缓冲的内存数量 |
- 使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是还未纳入内核管控范围的数量。
- 纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存还给 free ,因此 Linux 系统运行过程中 free 内存会越来越少,但不影响系统运行。因为这表示更多的空闲内存被内核管理了。
5. 第五行为交换分区(swap)信息:
内容举例 | 说明 |
3145724 total | 交换分区(虚拟内存)的总大小 |
3145724 free | 空闲交换分区的大小 |
0 used | 已经使用的交互分区的大小 |
2649008 avail Mem | 在不交换的情况下,对启动新应用程序可用内存的估计 |
交换分区是一个非常值得关注的地方,如果 swap 区的 used 数值持续发生变化那么说明在内核和交换分区之间正在持续发生数据交换,这表示内存不够用了——必须不断把内存中的数据保存到硬盘上。
6进程相关内容
top命令的快捷键
shift+e 切换内存显示模式(可重复按键切换)
z 切换是否彩色显示(可重复按键切换)
m 切换内存显示模式(可重复按键切换)
切换底部进程中单位的显示模式(可重复按键切换)
b 切换高亮选中(可重复按键切换)
shift+w 把当前配置保存到文件中,下次启动top会使用当前的配置
h 进入帮助菜单(进入菜单后,可按esc或q退出帮助菜单)
q退出top命令
打开下面的 终端,试试上面的这些快捷键。
top 排序字段
底部的进程排序,是可以选择按指定列进行排序的。
先按 f 进入字段选择界面,
然后按 上下键 选择要排序的字段,界面会高亮显示,选中合适的内容
确定选中操作后,按下 s 键活这个选择。
最后按 q 键退出排序字段选择界面。
你会看到不同的排序界面
打开下面的终端,继续尝试上面的操作。
下面是对 top 命令输出中各字段含义、作用及其可能的阈值简要解释:
PID - Process ID: 每个进程在系统中都有一个唯一的整数标识符,即进程ID(PID)。这是操作系统内核用于管理进程的标识。
NSPID - PID Namespace Inode: 表示进程所在PID命名空间的inode(索引节点)号。PID命名空间使得不同命名空间内的进程具有独立的PID视图,有助于实现容器化环境中的进程隔离。
USER - Effective User Name: 进程的有效用户名称,决定了进程的权限和资源访问限制。如果进程通过sudo、setuid等方式改变了其有效用户身份,这里会显示改变后的用户名称。
NSUSER - User Namespace Inode: 进程所在用户命名空间的inode号。用户命名空间允许为进程提供独立的用户和组ID视图,进一步增强容器化环境的安全性。
PR - Priority: 进程调度优先级。数值越小,优先级越高,CPU分配给该进程的机会可能越多。可以通过nice命令调整优先级。
NI - Nice Value: 与PR密切相关,表示进程的优先级调整值。范围通常为-20(最高优先级)到19(最低优先级)。默认为0。
VIRT - Virtual Image (KiB): 进程占用的虚拟内存总量(包括代码段、数据段、堆、共享库等),以千字节(KiB)为单位。此值可能大于物理内存大小,因为虚拟内存包括了硬盘上交换空间的使用。
RES - Resident Size (KiB): 进程当前在物理内存中占用的空间(包括代码、数据、栈和共享库的私有部分),以千字节(KiB)为单位。关注高RES值的进程有助于发现内存使用大户。
SHR - Shared Memory (KiB): 进程所使用的共享内存大小,即与其他进程共享的内存部分,以千字节(KiB)为单位。高SHR值可能表明进程间通信或资源共享较为密集。
PROCESS STATUS - 进程状态,如R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸状态)等。关注大量处于非正常状态(如D或Z)的进程,可能指示系统存在问题。
%CPU - CPU Usage: 进程在过去一段时间内占用CPU的百分比。持续高CPU使用率的进程可能是性能瓶颈。
%MEM - Memory Usage: 进程占用物理内存(RES)占总内存的比例。过高比例可能导致系统内存紧张。
TIME+ - CPU Time (hundredths): 进程自启动以来累计消耗的CPU时间,以百分之一秒为单位。可用于评估进程的历史资源消耗。
COMMAND - Command Name/Line: 进程的命令行信息,包括程序名称和可能的参数。用于识别具体进程及其功能。
PPID - Parent Process ID: 进程的父进程ID。可用于追踪进程间的父子关系。
UID - Effective User ID: 进程的有效用户ID,与USER对应,但以数字形式表示。
RUID / REAL USER ID - Real User ID: 进程的真实用户ID。若无特殊权限变更,与USER一致。
SUID / SAVED USER ID - Saved User ID: 进程的保存用户ID,用于某些特定操作(如执行setuid程序)时临时恢复用户的特权。
GID - Group ID: 进程所属的主要组ID,影响文件权限和其他资源访问。
GROUP - Group Name: 进程所属主要组的名称。
PGRP - Process Group ID: 进程所在进程组的ID,用于信号发送等操作。
TTY - Controlling TTY: 如果进程与某个终端相关联,此处显示该终端设备。否则为?。
TPGID - TTY Process Group ID: 控制进程TTY的进程组ID。
SID - Session ID: 进程所属会话的ID,用于进程组管理和控制。
NTH - Number of Threads: 进程包含的线程数量。多线程进程可能需要更多系统资源。
LAST USED CPU (SMP) - 最近使用的CPU(在多处理器系统中)。有助于了解进程的CPU亲和性或负载均衡情况。
TIME - CPU Time: 与TIME+类似,表示进程消耗的CPU时间,但可能格式或精度有所不同。
SWAP - Swapped Size (KiB): 进程被交换到硬盘上的内存大小,以千字节(KiB)为单位。高SWAP值可能表明物理内存不足或内存压力大。
CODE - Code Size (KiB): 进程代码段占用的内存大小,以千字节(KiB)为单位。
DATA - Data+Stack (KiB): 进程数据段(包括全局变量、静态变量等)和栈占用的内存大小,以千字节(KiB)为单位。
NMMAJ / NMNIN / NMDRT - Major/Minor Page Faults/Dirty Pages Count: 分别表示进程发生主缺页次数、次缺页次数和脏页计数。这些指标有助于分析内存访问效率和磁盘I/O压力。
WCHAN - Sleeping in Function: 当进程处于睡眠状态时,显示其等待的内核函数名。有助于理解进程阻塞原因。
FLAGS - Task Flags: 进程标志,通常包含调度策略、内存管理、调试等信息。具体内容依赖于系统的 <sched.h> 头文件定义。
CGROUPS - Control Groups: 进程所属的控制组(cgroups)路径。cgroups用于限制、记录和隔离进程资源使用。
SUPGIDS / SUPGRPS - Supplementary GIDs/Group Names: 进程除主要GID外附加的组ID及其名称列表。影响文件权限和其他资源访问。
TGID - Thread Group ID: 与进程ID(PID)相同,但在多线程环境中,TGID通常指的是主线程的PID。
ENVIRON - Environment Variables: 进程的环境变量列表。有助于了解进程运行环境。
VMJ / VMN - Major/Minor Faults Delta: 一段时间内进程发生主/次缺页的增量。用于监控内存访问趋势。
USED - Used Res+Swap Size (KiB): 进程使用的物理内存(RES)与交换空间(SWAP)之和,以千字节(KiB)为单位。
NSIPC / NSMNT / NSNET - IPC/Mount/Net Namespace Inodes: 分别表示进程所在IPC、挂载点和网络命名空间的inode号。这些命名空间有助于实现进程间通信、文件系统和网络资源的隔离。
阈值设定通常取决于具体应用场景、系统资源总量和性能目标。一些通用的考虑因素包括:
- CPU使用率:长时间持续高于某个阈值(如50%或更高)的进程可能是性能瓶颈。需要根据系统负载和预期工作负载调整阈值。
- 内存使用:RES、SHR和SWAP大小应保持在合理范围内,避免过度占用导致系统内存紧张。通常关注占用量较大(如超过总内存一定比例,如10%)或频繁触发交换操作的进程。
- 页面故障:高主/次缺页次数可能表明内存访问效率低下或内存不足。阈值取决于系统性能和工作负载特性。
- 线程数量:过多线程可能导致上下文切换频繁、锁竞争激烈等问题。关注NTH过高的进程,并结合具体情况设定阈值。
请注意,阈值设定应结合系统监控、日志分析等手段,根据实际性能指标和业务需求动态调整。