当前位置:网站首页 > 更多 > 玩电脑 > 正文

[系统技巧] Linux top 命令解析及使用

作者:CC下载站 日期:2023-10-11 22:30:13 浏览:29 分类:玩电脑



    前言

    在 Linux 中常用 top 动态监测程序运作的状态,以分析系统的整体性能。比如,监测 CPU 使用率、内存使用、系统负载以及每个进程资源占比等情况。


    1. top 监测结果分析

    先看下 top 整体输出结果:

    [系统技巧] Linux top 命令解析及使用

    从上图我们可以很清楚的看到,top 输出结果以光标所在处分为了上下 2 部分:

    1)上半部分5行是整个系统的资源使用状态;
    2)下半部分是系统中每个进程资源占用的具体信息;
    3)光标所在处是用来输入操作命令的。

    1.1 第一部分:系统整体性能分析

    1.1.1 第一行(top…):系统状态

    top - 16:41:10 up 16:54,  2 users,  load average: 0.00, 0.00, 0.00
    top - 16:41:10系统当前时间
    up 16:54系统开机到目前为止所经过的时间:16天54分
    2 users当前已经登入系统的用户人数
    load average: 0.00, 0.00, 0.00系统在 1, 5, 15 分钟的平均工作负载 (平均在 CPU 上运行或者等待运行的进程数量),越小代表系统越闲置。一般只要每个 CPU 的当前活动进程数不大于 3 表示系统的性能是良好的,如果大于 5 就表示系统性能有严重问题了。计算公式:每个 CPU 的当前任务数 = load average / CPU总数

    1.1.2 第二行(Tasks…):进程状态信息

    Tasks: 305 total,   1 running, 223 sleeping,   0 stopped,   0 zombie
    305 total所有启动的进程数
    1 running正在运行的进程数
    223 sleeping挂起的进程数
    0 stopped停止的进程数
    0 zombie僵尸进程数

    注意:如果 zombie 的值不是 0,就要好好看看到底是哪个进程变成僵尸了!!!

    1.1.3 第三行(Cpus…):CPU 的整体负载

    %Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.4 id,  0.1 wa,  0.0 hi,  0.2 si,  0.0 st
    0.2 us用户空间占用的 CPU 百分比
    0.1 sy内核空间占用的 CPU 百分比
    0.0 ni用户进程空间内改变过优先级的进程占用 CPU 百分比
    99.4 id空闲 CPU 百分比
    0.1 wa等待输入输入的 CPU 百分比(一般 CPU 处理速度很快,而磁盘 IO 操作很慢。wa 表示 CPU 在等待 IO 操作完成所花费的时间。系统不应该花费大量的时间来等待 IO 操作,否则就说明 IO 存在瓶颈
    0.0 hi硬中断占用的 CPU 百分比(硬中断是硬盘、网卡等硬件设备发送给 CPU 的中断消息)
    0.2 si软中断 CPU 百分比(软中断是由程序发出的中断)
    0.0 st虚拟 CPU 等待实际 CPU 的时间的百分比

    【提示】一般我们关注比较多的是:us、sy、id、wa、hi、si 这6个数值。如果是多核心的设备,可以【按下数字键 1】来查看不同 CPU 的负载率:

    [系统技巧] Linux top 命令解析及使用

    1)%id 表示 CPU 空闲率,当 id 持续过低的时候,表示系统迫切需要解决 CPU 资源问题了;
    2)CPU 使用率等于:1 - %id ,或者:us + sy + si;
    3)wa:使用率过高的时候,我们需要考虑 IO 的性能是否有瓶颈,可以在使用 iostat、sar 等命令做进一步分析;
    4)hi: 使用率过高时,表示当前硬件中断占用很大的百分比。一般硬件中断我们可以分析文件/proc/interrupts、/proc/irq/pid/smp_affinity、irqbalance 服务是否配置,以及 CPU 的频率设置,通过这些可以帮系统打散优化系统的硬件中断;
    5)si:Linux kernel 通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。从网卡到 IP 层的数据报文收发都是 si 处理的,长时间写日志也可能产生软件中断;
    6)当软中断出现瓶颈的时候,系统有个进行叫 ksoftirqd,每个 CPU 都有自己对应的 ksoftirqd/n(n 为 CPU 的逻辑 ID),每个 ksoftirqd 的内核线程都会去运行对应的 ksoftirqd(函数)来处理自己的中断队列上的软件中断。所以,当网络出现阻塞的时候,软件中断程序 ksoftirqd肯定会出现瓶颈。此时我们可以通过 ps aux|grep ksoftirqd 查看 ksoftirqd 的瓶颈;
    7) Ni:优先级(priority)为操作系统用来决定 CPU 分类的参数,Linux使用(round-robin)的算法来做 CPU 排程,优先序越高,有可能获得的 CPU 时间就越多。但是我们可以通过 nice 命令以更改过的优先序来执行程序,如果未制定程序,则会打印出目前的排程优先序,内定的adjustment 为 10,范围为 -20(最高优先序)到 19(最低优先序)。

    1.1.4 第四行(KiB Mem…):Mem内存信息(物理内存)

    KiB Mem :  3994728 total,  1374080 free,   611452 used,  2009196 buff/cache
    3994728 total物理内存总量
    1374080 free空闲物理内存
    611452 used已经使用的物理内存
    2009196 buff/cache内核缓存内存量

    1.1.5 第五行(KiB Swap…):Swap交换内存(虚拟内存)

    KiB Swap:  2097148 total,  2097148 free,        0 used.  3103764 avail Mem
    2097148 total交换区总量
    2097148 free空闲交换区总量
    0 used已使用的交换区总量
    3103764 avail Mem可用于启动一个新应用的内存(物理内存),和 free 不同,它计算的是可回收的 page cache 和 memory slab

    1.1.6 小结

    • 第四行和第五行输出的信息,等同于使用 free -m 命令;

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

    • 剩余可用内存总量 = 第四行的free + 第四行的buff/cache,按这个公式此服务器的可用内存:1374080k + 2009196k = 3.3GB左右;

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

    1.2 第二部分:进程信息

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    PID进程ID
    USER进程所有者
    PR进程的优先级,越小优先级越高
    NInice 值,负值表示高优先级,正值表示低优先级
    VIRT进程使用的虚拟内存总量,单位kb,VIRT = SWAP + RES
    RES进程使用的、未被换出的物理内存大小,单位kb,RES = CODE + DATA
    SHR进程使用的共享内存大小,单位 kb
    S进程状态(D=不可中断的睡眠状态(通常出现在IO阻塞) R=正在运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 N=进程优先值为负数 I=空闲状态)
    %CPU进程占用的 CPU 使用率
    %MEM进程使用的物理内存百分比
    TIME+进程使用的 CPU 时间总计,单位 1/100 秒
    COMMAND进程名称(命令名/命令行)

    上述列的是 top 命令的默认显示,还有一些参数选项可以使用 top 的交互命令选择显示,按 f 键,进入列配置页面选择需要展示的参数内容。

    2. top 命令行选项

    • 命令格式:top [参数]

    参数功能描述
    -b批处理,一般配合 -n 指定输出几次统计信息,将输出重定向到指定文件,比如:top -b -n 5 > top.txt
    -c显示进程的完整命令,默认是进程名
    -i不显示任何闲置 (idle) 或无用 (zombie) 的进程
    -s保密模式
    -S累积模式
    -d <秒数>设置刷新时间,默认是5s
    -n <次数>指定刷新次数,比如 top -n 5,刷新输出5次后退出
    -o <-PID/PID>指定要排序的字段,比如 top -o -PID:按照 PID 从小到大排序, top -o PID:按照 PID 从大到小排序
    -p <进程号>指定显示某个进程的信息
    -u <用户名>查找特定用户启动的进程

    3. top 交互命令

    • 在 top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了 s 选项, 其中一些命令可能会被屏蔽。

    按键功能描述
    1多核心的设备,可以查看不同 CPU 的负载率
    k终止一个进程
    i忽略闲置和僵死进程,这是一个开关式命令
    q退出程序
    r重新安排一个进程的优先级别
    S切换到累计模式
    s改变两次刷新之间的延迟时间(单位为 s),如果有小数,就换算成 ms。输入 0 值则系统将不断刷新,默认值是 5s
    f可以选择是否需要展示的项目
    o改变显示项目的顺序
    c显示产生进程的完整命令,等同于 -c 参数,再次按下 c 键,变为默认显示
    m切换显示内存信息
    t切换显示进程和 CPU 状态信息
    h显示帮助画面
    H查看线程信息
    l切换显示平均负载和启动时间信息
    M根据驻留内存大小进行排序
    P根据 CPU 使用百分比大小进行排序
    T根据时间/累计时间进行排序
    W将当前设置写入 ~/.toprc 文件中


    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯