top
命令的输出提供了有关系统总体负载、内存使用情况以及各个进程资源使用的实时信息。以下是详细的解释:
1. 系统运行时间和负载信息
top - 11:13:58 up 28 days, 23:59, 3 users, load average: 2.77, 1.98, 1.63
-
时间 :当前系统时间
11:13:58
。 -
运行时间 :系统已连续运行了
28 days, 23:59
(28 天 23 小时 59 分钟)。 -
登录用户数 :当前有
3
个用户登录。 -
负载均值(load average) :系统在过去
1
、5
和15
分钟的平均负载分别是2.77
、1.98
和1.63
。这些数值表示系统队列的任务数量,大于 CPU 核心数时会导致任务堆积。如果系统有 4 核心,负载 4 表示 CPU 刚好满负荷运行,负载超过 4 表示进程排队等待 CPU 时间,低于 4 则表示系统相对空闲。
在这个例子中:
2.77:过去 1 分钟的平均负载,表示系统在最近一段时间稍微繁忙。 1.98:过去 5 分钟的平均负载,比 1 分钟前略低,表明系统负载在过去 5 分钟内有所缓解。 1.63:过去 15 分钟的平均负载,比 5 分钟负载进一步降低,表明 15 分钟之前系统负载较轻,而最近负载逐渐上升。 如何判断系统负载是否正常 1. 单 CPU 系统:平均负载为 1.0 或以下一般表示系统处于正常状态。如果超过 1.0,系统可能会出现性能下降,表明有进程在等待 CPU 时间。 多核 CPU 系统:例如 4 核系统中,1.0 负载表示系统 25% 的 CPU 资源在被使用。如果负载接近 4.0 或更高,则表明 CPU 已满载,超过 4.0 则表示有进程在等待资源。
2. 任务(Tasks)概况
任务: 1055 total, 1 running, 1054 sleeping, 0 stopped, 0 zombie
- total :总任务数
1055
。 - running :正在运行的任务数
1
。 - sleeping :处于睡眠状态的任务
1054
,大部分进程在等待资源或输入输出操作。 - stopped :停止的任务数
0
。 - zombie :僵尸任务数
0
,即已终止但未释放资源的进程。
3. CPU 使用率
%Cpu(s): 1.6 us, 0.1 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- us(user) :用户空间占用 CPU 的百分比
1.6%
。 - sy(system) :系统空间(内核)占用 CPU 的百分比
0.1%
。 - ni(nice) :用户进程在修改过优先级后的 CPU 占用
0.0%
。 - id(idle) :空闲 CPU 百分比
98.2%
。 - wa(iowait) :等待 I/O 操作完成的时间百分比
0.0%
。 - hi(hardware interrupts) :硬件中断占用的 CPU 百分比
0.0%
。 - si(software interrupts) :软件中断占用的 CPU 百分比
0.0%
。 - st(steal time) :虚拟化环境下其他进程占用 CPU 的时间百分比
0.0%
。
4. 内存使用情况
MiB Mem : 128346.8 total, 10301.6 free, 56327.3 used, 61717.8 buff/cache
- total :总内存为
128346.8 MiB
。 - free :空闲内存
10301.6 MiB
。 - used :已用内存
56327.3 MiB
。 - buff/cache :用作缓冲和缓存的内存
61717.8 MiB
,这部分内存将被快速释放以供其他任务使用。
5. 交换分区使用情况
MiB Swap: 6504.0 total, 343.5 free, 6160.5 used. 70975.8 avail Mem
- total :交换分区总大小
6504.0 MiB
。 - free :空闲交换分区大小
343.5 MiB
。 - used :已使用交换分区大小
6160.5 MiB
。 - avail Mem :当前系统可用内存
70975.8 MiB
,包括了未使用的内存以及可以快速从缓存中释放的内存。
6. 各进程的详细信息
每个进程的资源占用详细信息如下:
字段 | 含义 |
---|---|
PID | 进程 ID |
USER | 进程所有者 |
PR | 优先级(Priority) |
NI | Nice 值,优先级调整数值 |
VIRT | 进程占用的虚拟内存(Virtual memory) |
RES | 进程占用的物理内存(Resident memory) |
SHR | 进程使用的共享内存 |
%CPU | CPU 使用率 |
%MEM | 内存使用率 |
TIME+ | 进程运行的累计 CPU 时间 |
COMMAND | 进程名称或启动命令 |
进程分析示例
661269 mysql 20 0 47.6g 39.6g 23080 S 136.3 31.6 676:00.34 mysqld
- 661269:进程 ID。
- mysql:进程所属用户。
- 20:优先级。
- 0:Nice 值(默认值)。
- 47.6g :虚拟内存使用量
47.6 GB
。 - 39.6g :实际使用的物理内存
39.6 GB
。 - 23080 :共享内存
23 MB
。 - 136.3 :CPU 使用率
136.3%
(多核情况下可能超过 100%)。 - 31.6 :内存使用率
31.6%
。 - 676:00.34 :累计 CPU 占用时间
676
分钟。 - mysqld:进程名(MySQL 数据库服务)。
这个进程占用大量的 CPU 和内存资源,是系统性能瓶颈的主要进程,可能需要进一步优化或进行其他资源分配。
bash
1. VIRT(Virtual Memory,虚拟内存)
VIRT 表示进程占用的虚拟内存总量,包括物理内存和交换空间。
内容:
进程分配的所有内存,包括实际使用的物理内存、交换空间和未使用的保留内存(即分配但未实际加载的内存区域)。
包括代码、数据段、堆、栈、动态库、共享内存等。
作用:
VIRT 并不代表进程实际使用的物理内存,而是系统为进程预留的内存空间。因此它可能会比 RES 和 SHR 高得多。
VIRT 较大时并不一定会占用很多物理内存。虚拟内存允许进程在地址空间上获得比物理内存更大的灵活性,帮助管理和隔离进程之间的内存。
2. RES(Resident Memory,常驻内存)
RES 表示进程实际占用的物理内存大小(即实际加载在 RAM 中的内存)。
内容:
进程实际加载到物理内存的部分,包括独占和共享的物理内存。
反映了进程对系统物理内存的实际需求。
作用:
RES 是系统资源消耗的一个更真实的指标,比 VIRT 更能体现进程实际使用的内存。
当 RES 较大时,系统的物理内存可能被大量占用,从而导致其他进程的内存不足,进而可能导致系统使用交换空间(swap),影响性能。
3. SHR(Shared Memory,共享内存)
SHR 表示进程使用的共享内存大小。
内容:
包括进程使用的共享库和其他共享资源(如共享的内存段),这些内存区域可能被多个进程同时使用。
包括由多个进程共享的代码段、共享库和动态库等。
作用:
SHR 可以帮助识别进程之间共享的内存,从而避免重复分配相同的内存资源,提升内存利用率。
SHR 值较高表示进程对共享资源依赖较多,可以通过优化共享库的加载等方式提高内存使用效率。