Linux 性能调优基础:top
top 命令是 linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用使用情况,类似于 windos 的任务窗口。
top 理论
#top - 16:55:39 up 220 days, 1:16, 4 users, load average: 299.05, 217.84, 106.90
Tasks: 3355 total, 12 running, 3339 sleeping, 3 stopped, 1 zombie
%Cpu(s): 40.7 us, 38.9 sy, 0.0 ni, 0.1 id, 0.0 wa, 20.1 hi, 0.2 si, 0.0 st
MiB Mem : 257336.1 total, 17260.1 free, 77063.5 used, 163012.4 buff/cache
MiB Swap: 32768.0 total, 19075.1 free, 13692.9 used. 42491.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
内容 | 解释 |
---|---|
16:55:39 | 当前时间 |
up 220 days | 系统运行时间 |
4 users | 当前登录用户数 |
load average: 299.05, 217.84, 106.90 | 系统负载,即任务队列平均长度。分别为 1、5、15 min 前到现在平均值 |
第二、三行为进程和 CPU 的信息。当有多个 CPU 时,这些内容可能会超过两行。内容如下:
内容 | 解释 |
---|---|
Tasks: 3355 total | 进程总数[键入 H 可查看线程数] |
12 running, 3339 sleeping, 3 stopped | 正在运行的进程、睡眠进程、停止的进程 |
1 zombie | 僵尸进程数 |
%Cpu(s): 40.7 us, 38.9 sy | 用户空间占用 CPU 百分比、内核空间占用 CPU 百分比 |
0.0 ni, 0.1 id | 用户进程空间内改变进程优先级占用 CPU、空闲 CPU 百分比 |
0.0 wa, 20.1 hi, 0.2 si, 0.0 st | 等待 IO 的 CPU 时间百分比,最后三个是中断请求相关 |
倒数第二、三行为内存相关信息:
内容 | 解释 |
---|---|
MiB Mem | 表示系统内存的使用情况 |
MiB Swap | 表示交换空间(虚拟内存)的使用情况 |
xxx total, xxx free, xxx used | 分别是内存总量、空闲内存总量、使用内存总量 |
xxx buff/cache | 被用作缓冲或缓存的内存量 |
xxx avail Mem | 可用的交换空间 |
由硬件设备或程序共享的数据区域称为缓冲区。它们以不同的速度运行,或者有不同的优先顺序。缓冲区允许每个设备或进程在没有其他设备或进程阻碍的情况下运行。为了使缓冲区有效,缓冲区设计器需要考虑缓冲区的大小。与缓存一样,缓冲区是一个“中点保存位置”,但它的存在并不是为了加快活动的速度,而是为了支持单独活动的协调。
这个术语不仅用于编程,也用于硬件。在编程中,缓冲有时需要从数据的最终预期位置筛选数据,以便在移动到常规文件或数据库之前对数据进行编辑或处理。
- cached
高速缓冲存储器是随机存取存储器(RAM)的一种。计算机微处理器对高速缓冲存储器的访问速度比普通 RAM 的访问速度更快。就像微处理器处理数据一样,它首先在高速缓冲存储器中查找,如果在那里,它会从之前读取的数据中找到数据,它不需要从更大的内存中进行更耗时的数据读取。
有时,高速缓冲存储器是按照与微处理器的接近程度和便利程度来描述的。L1 高速缓存与微处理器位于同一芯片上。
除了高速缓存之外,RAM 本身也是一种用于硬盘存储的高速缓存,因为当你打开计算机并加载正在加载的操作系统时,所有 RAM 的内容都会先到达硬盘,稍后当你启动新应用程序并访问新数据。RAM 还包含一个称为磁盘缓存的特殊区域,该区域由最近从硬盘读取的数据组成。
最后 1 行则是进程相关的资源占用信息:
- PID:进程ID。系统中每个进程都有一个唯一的ID号,称为进程ID。
- USER:进程的拥有者。显示启动这个进程的用户名称。
- PR:进程的优先级。内核根据这个值来决定进程的执行优先级。
- NI:进程的nice值。这是一个用户控制的为进程设置的优先级的值。数值可从-20(最高优先级)到19(最低优先级)。
- VIRT:虚拟内存使用量。进程使用的所有虚拟内存的和,包括进程使用的库,以及映射的文件和交换空间的大小。
- RES:常驻内存大小。这是进程当前使用的、未被调出的物理内存量,单位通常是KB。
- SHR:共享内存大小。这是多个进程可能共享的内存部分,通常包括库等。
- S:进程的状态。通常的状态有:
- S(睡眠中):等待事件完成(如输入/输出完成)。
- R(运行中):正在运行或在运行队列中等待。
- T(停止):进程已停止执行。
- Z(僵尸):进程已终止,但其父进程尚未收到其终止状态。
- %CPU:CPU使用率。展示进程使用的CPU时间百分比,这个值是在最后一次更新的时候样本里CPU使用情况的近似值,可能超过100%在多核CPU的系统。
- %MEM:内存使用率。该进程使用的物理内存和总物理内存的百分比。
- TIME+:进程使用的CPU时间总计,格式通常为分钟:秒。
- COMMAND:启动进程的命令名称。
top 技巧
终端执行 top 命令之后【也可后接一些选项,比如 top -p 1 只监控 init 进程,top -u root 只显示 root 运行进程等等】,可以敲击如下按键,实现不同功能:
- h:获取 top 的命令帮助
- 1(数字1):列出所有的单个 CPU 负载情况
- z:top 显示颜色
- x:类似高亮显示,在 z 模式下使用
- P[大写]:按 CPU 占用高低顺序列出程序
- M[大写]:按内存占用高低顺序列出程序
- c:显示进程命令的全路径与参数
- H:显示线程,默认只显示进程
- top 默认按 cpu 占用排序,按F(大写)即可选择相应排序
- d:top 默认刷新时间是 3s ,使用d键可自定义刷新时间
- top 选择列排序[高到低]的方法[在z颜色和x高亮模式下显示效果明显]:
- shift+<:左选
- shift+>:右选
- f:可以指定 top 显示的内容,如 ppid、swap 等都可以选择显示
- 显示 Swap 利用率:按 f 键,然后按 p 键,回车即可看到 Swap 状态
- k:输入 k 之后可以 kill 掉指定的进程
- A:分类显示各种系统资源高的进程。可用于快速识别系统上的性能要求极高的任务,推荐使用
- W[大写]:将当前设置写入 ~/.toprc 文件中。这是写 top 配置文件的推荐方法