练习 28:性能:获取性能情况,uptime,free,top

原文:Exercise 28. Performance: getting performance stats, uptime, free, top

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

这个练习很简单。首先,我们需要什么样的性能数据?

  • CPU 使用情况:

    • 它的负载如何?

    • 哪些进程正在使用它?

  • 内存使用情况:

    • 使用了多少内存?

    • 多少内存是空闲的?

    • 多少内存用于缓存?

    • 哪些进程消耗了它?

  • 磁盘使用情况:

    • 执行多少输入/输出操作?

    • 由哪个进程?

  • 网络使用情况:

    • 传输了多少数据?

    • 由哪个进程?

  • 进程情况:

    • 有多少进程?

    • 他们在做什么 工作,还是等待什么?

    • 如果在等待什么,它是什么呢?CPU,磁盘,网络?

为了获取这些情况,我们可以使用以下工具:

  • uptime - 系统运行了多长时间。

  • free - 显示系统中可用和使用的内存量。

  • vmstat - 进程,内存,分页,块 IO,陷阱,磁盘和 cpu 活动的信息。

  • top - 实时显示 Linux 任务。

我们来看看这个程序及其输出。

uptime的输出:

字段和描述:

字段
描述

(1)

当前时间。

(2)

正常运行时间(启动后的时间)。

(3)

目前有多少用户登录。

(4)

过去 1 分钟的 CPU 负载。这不是规范化的,所以负载均值为 1 意味着单个 CPU 的满负载,但是在 4 个 CPU 的系统上,这意味着它有 75% 空闲时间。

(5)

过去 5 分钟的 CPU 负载。

(6)

过去 15 分钟的 CPU 负载。

free的输出:

字段和描述:

字段
描述

(1)

物理内存总量。

(2)

使用的物理内存总量。

(3)

空闲的物理内存总量。

(4)

共享内存列应该被忽略;它已经过时了。

(5)

专用于缓存磁盘块的 RAM 和文件系统元数据总量。

(6)

专用于从文件读取的页面的 RAM 总量。

(7)

物理内存总量,不包括缓冲区和缓存,(2)-(5)-(6)

(8)

空闲的物理内存总量,包括空闲的缓冲区和缓存,(1)-(7)

(9)

交换文件使用信息。

(10)

总内存使用信息,包括交换内存

vmstat输出:

字段和描述:

模式
情况
字段
描述

虚拟内存

进程

(1)

r:等待运行的进程数。

(2)

b:不间断睡眠中的进程数。

内存

(3)

swpd:使用的虚拟内存量。

(4)

free:空闲内存量。

(5)

buff:用作缓冲区的内存量。

(6)

cache:用作缓存的内存量。

(17)

inact:非活动内存量。

(18)

active:活动内存量。

交换

(7)

si:从磁盘换入的内存量(/秒)。

(8)

so:换出到磁盘的内存量(/秒)。

I/O

(9)

bi:从设备接收的块(块/秒)。

(10)

bo:发送到设备的块(块/秒)。

系统

(11)

in:每秒中断的次数,包括时钟。

(12)

cs:每秒上下文切换的数量。

CPU

(13)

us:运行非内核代码的时间。(用户时间,包括优先的时间)

(14)

sy:运行内核代码的时间。(系统时间)

(15)

id:闲置时间。在 Linux 2.5.41 之前,这包括 IO 等待时间。

(16)

wa:IO 等待时间。在 Linux 2.5.41 之前,包含在闲置时间中。

磁盘,-d

设备

(19)

设备名称

(20)

total:成功完成的总读取数

(21)

merge:分组的读取数(生成一个 I/O)

(22)

sectors:成功读取的分区

(23)

ms:用于读取的毫秒

(24)

total:成功完成的总写入数

(25)

merge:分组的写入数(生成一个 I/O)

(26)

sectors:成功写入的分区

(27)

ms:用于写入的毫秒

I/O

(28)

cur:正在进行中的 I/O

(29)

s:用于 I/O 的秒数

Slab,-m

Slab

(30)

缓存:缓存名称

(31)

num:当前活动对象的数量

(32)

total:可用对象的总数

(33)

size:每个对象的大小

(34)

page:具有至少一个活动对象的页数

top的输出:

字段和输出:

部分
字段
描述

正常运行时间

(1)

当前时间。

(2)

正常运行时间(启动后的时间)。

(3)

目前有多少用户登录。

(4)

过去 1,5 和 15 分钟内的 CPU 负载。这不是规范化的,所以负载均值为 1 意味着单个 CPU 的满负载,但是在 4 个 CPU 的系统上,这意味着它有 75% 空闲时间。

任务

(5)

运行进程总数。

(6)

当前正在执行的进程数。

(7)

当前正在睡眠的进程数。

(8)

被停止的进程数(例如使用CTRL + Z)。

(9)

已经停止(“僵尸”)的进程数量,已终止,但未由其父进程回收。

CPU(S)

(10)

CPU 运行不优先的用户进程的时间。

(11)

CPU 运行内核及其进程的时间。

(12)

CPU 运行优先的用户进程的时间。

(13)

CPU 花费的空闲时间。

(14)

CPU 等待 I/O 完成的时间。

(15)

CPU 维护硬件中断的时间。

(16)

CPU 维护软件中断的时间。

(17)

由管理程序从这个虚拟机“偷走”的 CPU 总量,用于其他任务(例如启动另一个虚拟机)。

内存/交换

(18)

物理内存总量。

(19)

使用的物理内存总量。

(20)

完全空闲的物理内存。

(21)

专用于缓存磁盘块的 RAM 和文件系统元数据总量。

(22,23,24)

总,使用和空闲交换内存。

(25)

专用于从文件读取的页面的 RAM 总量。

进程

(26)

任务的唯一进程 ID,它定期地包装,尽管从未重新启动。

(27)

任务所有者的有效用户名。

(28)

任务的优先级。

(29)

任务的优先值。负的优先值表示更高的优先级,而正的优先值表示较低的优先级。在这个字段中的零只是代表在确定任务的调度时不会调整优先级。

(30)

任务使用的虚拟内存总量。它包括所有代码,数据和共享库,以及已经被替换的页面。以及已被映射但未被使用的页面。

(31)

任务已使用的未交换的物理内存。

(32)

任务使用的共享内存量。它只是反映可能与其他进程共享的内存。

(33)

任务的状态可以是以下之一:D=不间断睡眠,R=运行,S=睡眠,T=跟踪或停止,Z=僵尸。

(34)

自上次屏幕更新以来,所经过的 CPU 时间的任务份额,以 CPU 时间总数的百分比表示。

(35)

任务当前使用的可用物理内存的份额。

(36)

CPU 时间,单位是百分之一秒,与TIME相同,但通过百分之一秒反映更大的粒度。

(37)

命令 - 命令行或程序名称

你可能会看到很多字段。许多字段都存在于多个工具中,这些工具有些冗余的功能。通常情况下,你只需要这个字段的一小部分,但你需要知道,系统性能的许多信息(实际上还有更多)可用于你,因为有时候会出现一个模糊的问题,并且为了能够解决它,需要知道如何读取这些数据。

现在,你将学习如何使用系统性能工具。

这样做

你会看到什么

解释

  1. 打印当前的正常运行时间。

  2. 打印出可用内存信息。

  3. 这个很有趣,最好认为是一种实验。首先,我们在后台启动 ( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )&,之后我们 以连续模式启动vmstat,所以它将打印出其信息直到中断。我们可以看到,在这个命令启动 5 秒钟后,CPU 负载显着增加了一段时间,然后减少,另外 5 秒钟后vmstat被杀死。

  4. 打印当前的正常运行时间。注意负载平均值的变化。

  5. 这是另一个实验,几乎和以前一样,但这次用磁盘写入。

  6. 删除所有缓存和缓冲区。

  7. 另一个实验。我们想看看读取系统中的所有文件和目录名称,会如何影响内存中的文件系统缓存,并且我们可以看到它被缓存在缓冲区中,这是有理论根据的。

  8. 再次删除所有缓存和缓冲区。

  9. 这次我们想看看,文件读取如何影响内存中的文件系统缓存。我们可以看到读取的文件被缓存在缓存部分,来增加后续访问的时间。

附加题

  • 为什么在我们的第一个实验中,不是user,而是system CPU 使用率上升到 100?

  • 这是什么意思?dd if=/dev/zero of=test.img bs=32 count=$( (32*1024*200) )

  • 启动top,并按下h。现在尝试按照 CPU,内存和 PID 对其输出进行排序。

Last updated