练习 28:性能:获取性能情况,uptime
,free
,top
这个练习很简单。首先,我们需要什么样的性能数据?
- CPU 使用情况:
- 它的负载如何?
- 哪些进程正在使用它?
- 内存使用情况:
- 使用了多少内存?
- 多少内存是空闲的?
- 多少内存用于缓存?
- 哪些进程消耗了它?
- 磁盘使用情况:
- 执行多少输入/输出操作?
- 由哪个进程?
- 网络使用情况:
- 传输了多少数据?
- 由哪个进程?
- 进程情况:
- 有多少进程?
- 他们在做什么 工作,还是等待什么?
- 如果在等待什么,它是什么呢?CPU,磁盘,网络?
uptime
- 系统运行了多长时间。free
- 显示系统中可用和使用的内存量。vmstat
- 进程,内存,分页,块 IO,陷阱,磁盘和 cpu 活动的信息。top
- 实时显示 Linux 任务。
我们来看看这个程序及其输出。
uptime
的输出:
字段和描述:
free
的输出:
user1@vm1:~$ free -mt
# (1) (2) (3) (4) (5) (6)
total used free shared buffers cached
Mem: 496 267 229 0 27 196
# (7) (8)
-/+ buffers/cache: 43 453
# 9
Swap: 461 0 461
# 10
Total: 958 267 691
vmstat
输出:
字段和描述:
top
的输出:
# (1) (2) (3) (4)
top - 03:22:44 up 4 days, 22:54, 1 user, load average: 0.00, 0.00, 0.00
# (5) (6) (7) (8) (9)
Tasks: 63 total, 1 running, 62 sleeping, 0 stopped, 0 zombie
# (10) (11) (12) (13) (14) (15) (16) (17)
Cpu(s): 0.0%us, 1.1%sy, 0.0%ni, 98.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
# (18) (19) (20) (21)
Mem: 508820k total, 273792k used, 235028k free, 27844k buffers
# (22) (23) (24) (25)
Swap: 473080k total, 0k used, 473080k free, 201252k cached
#(26) (27) (28)(29) (30) (31) (32,33) (34)(35) (36) (37)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8356 804 676 S 0.0 0.2 0:05.99 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
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
6 root 20 0 0 0 0 S 0.0 0.0 0:03.25 events/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuset
<...>
字段和输出:
现在,你将学习如何使用系统性能工具。
user1@vm1:~$ uptime
05:36:45 up 6 days, 1:08, 1 user, load average: 0.00, 0.00, 0.00
user1@vm1:~$ free
total used free shared buffers cached
Mem: 508820 239992 268828 0 820 213720
-/+ buffers/cache: 25452 483368
Swap: 473080 0 473080
user1@vm1:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 268828 820 213720 0 0 21 10 14 11 0 0 100 0
user1@vm1:~$ ( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )& vmstat 1
[1] 6078
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 1 0 268556 828 213736 0 0 21 10 14 11 0 0 100 0
0 0 0 268556 828 213772 0 0 16 0 19 10 0 0 100 0
0 0 0 268556 828 213772 0 0 0 0 13 8 0 0 100 0
0 0 0 268556 828 213772 0 0 0 0 15 11 0 0 100 0
0 0 0 268556 828 213772 0 0 0 0 14 10 0 0 100 0
0 0 0 268556 828 213772 0 0 0 0 18 13 0 0 100 0
1 0 0 267316 836 213844 0 0 74 0 267 26 0 99 1 0
1 0 0 267316 836 213844 0 0 0 0 303 7 0 100 0 0
1 0 0 267316 836 213844 0 0 0 0 271 11 0 100 0 0
1 0 0 267316 836 213844 0 0 0 0 257 12 0 100 0 0
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 4.95038 s, 6.4 MB/s
0 0 0 267928 860 213860 0 0 27 0 265 29 1 97 2 0
0 0 0 267936 860 213848 0 0 0 0 15 9 0 0 100 0
0 0 0 267936 860 213848 0 0 0 0 14 7 0 0 100 0
0 0 0 267936 860 213848 0 0 0 0 14 7 0 0 100 0
0 0 0 267936 860 213848 0 0 0 0 13 11 0 0 100 0
Terminated
user1@vm1:~$ uptime
05:22:15 up 6 days, 54 min, 1 user, load average: 0.07, 0.02, 0.00
[1]+ Done ( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )
user1@vm1:~$ uptime
05:22:22 up 6 days, 54 min, 1 user, load average: 0.06, 0.02, 0.00
user1@vm1:~$ ( sleep 5 && dd if=/dev/zero of=test.img bs=32 count=$((32*1024*200)) && sleep 5 && killall vmstat )& vmstat -nd 1 | egrep -v 'loop|sr0'
[1] 6086
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 146985 2230744 21821320 105848 32190 1343154 10927338 1330144 0 105
sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105
sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105
sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105
sda 146995 2230744 21821648 105848 32190 1343154 10927338 1330144 0 105
sda 146999 2230744 21821680 105856 32190 1343154 10927338 1330144 0 105
sda 146999 2230744 21821680 105856 32190 1343154 10927338 1330144 0 105
sda 147000 2230744 21821688 105856 32208 1344160 10935530 1330288 0 105
sda 147000 2230744 21821688 105856 32274 1349214 10976490 1330748 0 105
sda 147000 2230744 21821688 105856 32325 1353259 11009258 1331236 0 105
sda 147000 2230744 21821688 105856 32450 1364657 11101442 1337176 0 105
sda 147000 2230744 21821688 105856 32450 1364657 11101442 1337176 0 105
sda 147001 2230744 21821696 105856 32471 1366301 11114762 1337348 0 105
sda 147001 2230744 21821696 105856 32525 1370529 11149018 1337732 0 105
sda 147001 2230744 21821696 105856 32573 1374577 11181786 1338064 0 105
sda 147001 2230744 21821696 105856 32698 1386562 11278666 1346244 0 105
6553600+0 records in
6553600+0 records out
209715200 bytes (210 MB) copied, 11.7088 s, 17.9 MB/s
sda 147001 2230744 21821696 105856 32698 1386562 11278666 1346244 0 105
sda 147001 2230744 21821696 105856 32698 1386562 11278666 1346244 0 105
sda 147001 2230744 21821696 105856 32698 1386562 11278666 1346244 0 105
sda 147001 2230744 21821696 105856 32698 1386562 11278666 1346244 0 105
sda 147001 2230744 21821696 105856 32762 1393910 11337962 1349192 0 105
user1@vm1:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
[1]+ Done ( sleep 5 && dd if=/dev/zero of=test.img bs=32 count=$((32*1024*200)) && sleep 5 && killall vmstat )
user1@vm1:~$ free -mt ; find / >/dev/null 2>&1 ; free -mt
total used free shared buffers cached
Mem: 496 30 466 0 0 5
-/+ buffers/cache: 24 472
Swap: 461 0 461
Total: 958 30 928
total used free shared buffers cached
Mem: 496 64 432 0 22 6
-/+ buffers/cache: 35 461
Swap: 461 0 461
Total: 958 64 894
user1@vm1:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
user1@vm1:~$ cat test.img /dev/null ; free -mt
total used free shared buffers cached
Mem: 496 230 265 0 0 205
-/+ buffers/cache: 24 471
Swap: 461 0 461
Total: 958 230 727
user1@vm1:~$
- 打印当前的正常运行时间。
- 打印出可用内存信息。
- 这个很有趣,最好认为是一种实验。首先,我们在后台启动
( sleep 5 && dd if=/dev/urandom of=/dev/null bs=1M count=30 && sleep 5 && killall vmstat )&
,之后我们 以连续模式启动vmstat
,所以它将打印出其信息直到中断。我们可以看到,在这个命令启动 5 秒钟后,CPU 负载显着增加了一段时间,然后减少,另外 5 秒钟后vmstat
被杀死。 - 打印当前的正常运行时间。注意负载平均值的变化。
- 这是另一个实验,几乎和以前一样,但这次用磁盘写入。
- 删除所有缓存和缓冲区。
- 另一个实验。我们想看看读取系统中的所有文件和目录名称,会如何影响内存中的文件系统缓存,并且我们可以看到它被缓存在缓冲区中,这是有理论根据的。
- 再次删除所有缓存和缓冲区。
- 这次我们想看看,文件读取如何影响内存中的文件系统缓存。我们可以看到读取的文件被缓存在缓存部分,来增加后续访问的时间。
- 为什么在我们的第一个实验中,不是
user
,而是system
CPU 使用率上升到 100? - 启动
top
,并按下h
。现在尝试按照 CPU,内存和 PID 对其输出进行排序。