返回首页 两个月精通 Shell 脚本

shell 学习五十一天----top 命令查看进程列表

top 命令查看进程列表

top 命令是 linux 下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况。和 win 的资源管理器类似。top 是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,知道用户终止该程序为止。比较准确的说,top 命令提供了实时的对系统处理器的状态监视。它将显示系统中 CPU 最” 敏感” 的任务列表。该命令可以按 CPU 使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互命令或者在个人定制文件中进行设定。

top 命令详解

  1. 命令格式: top [参数]

  2. 功能: 显示当前系统正在执行的进程的相关信息,包括进程的相关信息,包括进程 ID,内存占用率,CPU 占用率等等

  3. 主要参数: ```参数 说明 -b 批处理 -c 显示完整的命令 -I 忽略失效过程 -s 保密模式 -S 累积模式 -i< 时间 > 设置间隔时间 -u< 用户名 > 指定用户名 -p< 进程号 > 指定进程 -n< 次数 > 循环显示的次数

  4. 使用案例

案例 1:

\#top
top - 10:03:56 up 26 min, 1 user, load average:0.00,0.00,0.00
Tasks:101 total,  1 running,100 sleeping,  0 stopped,  0 zombie
Cpu(s): 0.4%us, 0.8%sy, 0.0%ni,97.3%id, 1.4%wa, 0.0%hi, 0.1%si, 0.0%st
Mem:  1922432k total,  156380k used, 1766052k free,   13788k buffers
Swap: 1048568k total,       0k used, 1048568k free,   63608k cached
\
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                   
 1653 root      20   0 15032 1096  836 R  2.0  0.1   0:00.01 top                                                       
    1 root      20   0 19356 1528 1228 S  0.0  0.1   0:02.58 init                                                      
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                  
3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0 ```  
省略部分显示结果

分析:

- 前五行是当前系统情况整体的统计信息区。

- 具体介绍如下:
    - 第一行:任务队列信息,同 uptime 命令的执行结果,具体参数说明如下:
```10:03:56 :当前系统时间
up 26 min :系统连续运行的时间 (不重启,不断电,不关机)
1 user :当前有 1 个用户登录系统
load average:0.00,0.00,0.00      :;oad average 后面的三个数字分别是一分钟,五分钟,十五分钟的负载情况。load average :数据是每隔五秒检查一次活跃的进程数,然后按特定算法算出的数值。如果这个数除以逻辑 CPU 的数量,结果高于 5 的时候就表明系统在超负荷运转了。```

    - 第二行,Tasks----任务 (进程),具体信息说明如下:
系统目前有 101 个进程,目前有一个正在运行,100 个在 sleep,0 个进程 stopped,0 个僵死进程。

    - 第三行,CPU 状态信息,具体属性说明如下:
        - `0.4%us`: 用户控件占用 CPU 的百分比
        - `0.8%sy`:  内核控件占用 CPU 的百分比
        - `0.0%ni`: 改变过优先级的进程占用 CPU 的百分比
        - `97.3%id`: 空闲 CPU 百分比
        - `1.4%wa`:IO 等待占用的 CPU 的百分比
        - `0.0%hi`: 硬中断占用 CPU 的百分比
        - `0.1%si`: 软中断占用 CPU 的百分比
        - `0.0%st`:虚拟机被 `hpyervisor` 偷去的 CPU 时间
        - 注释:`hypervisor` 是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做 VMM(虚拟机监视器)。

        `hypervisor` 是一种在虚拟环境中的 “元” 操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理服务设备,`hypervisor` 补单协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行 `hypervisor` 时,他回家再所有虚拟机客户端的操作系统,同时会分配给每一台虚拟机适量的内存,cpu,网络,磁盘。

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

    - 第四行,内存状态,具体信息如下:
        - `1922432k total`:物理内存总量 (20G)
        - `156380k used`:使用中的内存总量 (1.5G)
        - `1766052k free`:空闲内存总量 (17.5G)
        - `13788k buffers`:缓存的内存量 (137M)

    - 第五行,swap 交换分区信息,具体说明如下:
        - `1048568k total` :交换区总量 (10G)
        - `0k used `:使用的交换区总量 (0K)
        - `1048568k free `:空闲交换区总量 (10 G)
        - `63608k cached` :缓冲的交换区总量 (6M)

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

        如果出于习惯去计算可用内存书,这里有个近似的计算公式,第四行的 `free+` 第四行的 `buffers+` 第五行的 cached,按这个公式此台服务器的可用内存:`1766052k + 13788k + 63608k =18.5G` 左右。

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

    - 第六行,空行

    - 第七行以下,各进程 (任务) 的状态监控,项目列信息说明如下:
        ```项目列表名称
        说明
        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
        进程名称 (命令行 / 命令名)

其他使用技巧

  1. 多核 CPU 监控 在 top 命令基本视图中,按键盘数字"1",可监控每个逻辑 CPU 的状况,再按数字键 1,就会返回 top 基本视图界面

  2. 高亮显示当前运行进程 在 top 命令的试图下,按下字母键 b(打开 / 关闭加亮效果) 我们发现 top 进程被加亮了,通配进程就是视图第二行显示的唯一的运行状态的那个进程,可以通过字母键 y 关闭或打开运行状态进程的加亮效果。

  3. 进程字段排序 默认进入 top 时,各进程是按照 CPU 的占用量来排序的,敲击字母键 x(打开 / 关闭排序列的加亮效果),可以看到 top 默认的排序列是 "%CPU"。(centOS 貌似不行)

  4. 通过"shift+ 左右方向键" 可以向左或向右改变排序。(centOS 貌似不行)

  5. top 交互模式 (就是说在进入 top 命令基本视图中输入,类似与 vim) 在 top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果再命令行中使用的 s 选项,其中一些命令可能会被屏蔽。

命令 说明 h 显示帮助画面,给出一些简短的命令总结说明 k 终止一个进程 i 忽略闲置的僵死进程。这是一个开关式命令 q 退出 top r 重新安排一个进程的优先级别 S 切换到累计模式 s 改变两次刷新之间的延迟时间 (单位为 s),如果有小数,就换算成 m s。输入 0 值则系统将不断刷新,默认值是 5s f 或者 F 从当前显示中添加或删除项目 o 或 O(字母) 改变显示项目的顺序 l(小写字母) 切换显示平均负载和启动时间信息 m 切换显示内存信息 t 切换显示进程和 CPU 状态信息 c 切换显示命令名称和完整命令行 M 根据驻留内存大小进行排序 P 根据 CPU 适用百分比大小进行排序 T 根据时间 / 累计时间进行排序 W 将当前设置写入~/.toprc 文件中