练习 28:性能:获取性能情况,uptime,free,top
原文:Exercise 28. Performance: getting performance stats, uptime, free, top
译者:飞龙
自豪地采用谷歌翻译
这个练习很简单。首先,我们需要什么样的性能数据?
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)
命令 - 命令行或程序名称
你可能会看到很多字段。许多字段都存在于多个工具中,这些工具有些冗余的功能。通常情况下,你只需要这个字段的一小部分,但你需要知道,系统性能的许多信息(实际上还有更多)可用于你,因为有时候会出现一个模糊的问题,并且为了能够解决它,需要知道如何读取这些数据。
现在,你将学习如何使用系统性能工具。
这样做
你会看到什么
解释
打印当前的正常运行时间。
打印出可用内存信息。
这个很有趣,最好认为是一种实验。首先,我们在后台启动
( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )&,之后我们 以连续模式启动vmstat,所以它将打印出其信息直到中断。我们可以看到,在这个命令启动 5 秒钟后,CPU 负载显着增加了一段时间,然后减少,另外 5 秒钟后vmstat被杀死。打印当前的正常运行时间。注意负载平均值的变化。
这是另一个实验,几乎和以前一样,但这次用磁盘写入。
删除所有缓存和缓冲区。
另一个实验。我们想看看读取系统中的所有文件和目录名称,会如何影响内存中的文件系统缓存,并且我们可以看到它被缓存在缓冲区中,这是有理论根据的。
再次删除所有缓存和缓冲区。
这次我们想看看,文件读取如何影响内存中的文件系统缓存。我们可以看到读取的文件被缓存在缓存部分,来增加后续访问的时间。
附加题
为什么在我们的第一个实验中,不是
user,而是systemCPU 使用率上升到 100?这是什么意思?
dd if=/dev/zero of=test.img bs=32 count=$( (32*1024*200) )。启动
top,并按下h。现在尝试按照 CPU,内存和 PID 对其输出进行排序。
Last updated