版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
细说Linux系统优化-实践篇作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题,本章从系统入手,重点讲述由于系统软、硬件配置不当可能造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程。
1cpu性能评估
Cpu是影响Linux性能的主要因素之一,下面先介绍几个查看CPU性能的命令。
1.1vmstat命令
该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况。
下面是vmstat命令在某个系统的输出结果:
[root@node1~]#vmstat23
procsmemory
swap--
io--system--
cpu
r
b
swpd
free
buff
cache
si
so
bi
bo
in
cs
ussy
id
wast
0
0
0
162240
8304
67032
0
0
13
21
1007
23
0
1
98
0
0
0
0
0
162240
8304
67032
0
0
1
0
1010
20
0
1
1000
0
0
0
0
162240
8304
67032
0
0
1
1
1009
18
0
1
99
0
0
对上面每项的输出解释如下:
procs
r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
memory
swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。
free列表示当前空闲的物理内存数量(以k为单位)
buff列表示bufferscache的内存数量,一般对块设备的读写才需要缓冲。
cache列表示pagecached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。
IO项显示磁盘读写状况
Bi列表示从块设备读入数据的总量(即读磁盘)(每秒kb)。
Bo列表示写入到块设备的数据总量(即写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。
system显示采集间隔内发生的中断数
in列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数。
上面这2个值越大,会看到由内核消耗的CPU时间会越多。
CPU项显示了CPU的使用状态,此列是我们关注的重点。
us列显示了用户进程消耗的CPU时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为80%,如果us+sy大于80%说明可能存在CPU资源不足。
id列显示了CPU处在空闲状态的时间百分比。
wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)。
综上所述,在对CPU的评估中,需要重点注意的是procs项r列的值和CPU项中us、sy和id列的值。
1.2
sar命令
检查CPU性能的第二个工具是sar,sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。
下面是sar命令对某个系统的CPU统计输出:
[root@webserver~]#sar-u35
Linux2.6.9-42.ELsmp(webserver)
11/28/2008
_i686_
(8CPU)11:41:24AM
CPU
%user
%nice
%system
%iowait
%steal
%idle
11:41:27AM
all
0.88
0.00
0.29
0.00
0.00
98.83
11:41:30AM
all
0.13
0.00
0.17
0.21
0.00
99.50
11:41:33AM
all
0.04
0.00
0.04
0.00
0.00
99.92
11:41:36AM
all
0.29
0.00
0.13
0.00
0.00
99.58
11:41:39AM
all
0.38
0.00
0.17
0.04
0.00
99.41
Average:
all
0.34
0.00
0.16
0.05
0.00
99.45
对上面每项的输出解释如下:
%user列显示了用户进程消耗的CPU时间百分比。
%nice列显示了运行正常进程所消耗的CPU时间百分比。
%system列显示了系统进程消耗的CPU时间百分比。
%iowait列显示了IO等待所占用的CPU时间百分比
%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。
%idle列显示了CPU处在空闲状态的时间百分比。
这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的一个平均值。
需要注意的一点是:第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生多大影响。
在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高,而应用缓慢现象的发生。
针对这个问题,可以对系统的每个CPU分开查询,统计每个CPU的使用情况:
[root@webserver~]#sar-P035
Linux2.6.9-42.ELsmp(webserver)
11/29/2008
_i686_
(8CPU)06:29:33PM
CPU
%user
%nice
%system
%iowait
%steal
%idle
06:29:36PM
0
3.00
0.00
0.33
0.00
0.00
96.67
06:29:39PM
0
0.67
0.00
0.33
0.00
0.00
99.00
06:29:42PM
0
0.00
0.00
0.33
0.00
0.00
99.67
06:29:45PM
0
0.67
0.00
0.33
0.00
0.00
99.00
06:29:48PM
0
1.00
0.00
0.33
0.33
0.00
98.34
Average:
0
1.07
0.00
0.33
0.07
0.00
98.53
这个输出是对系统的第一颗CPU的信息统计,需要注意的是,sar中对CPU的计数是从0开始的,因此,“sar-P035”表示对系统的第一颗CPU进行信息统计,“sar-P435”则表示对系统的第五颗CPU进行统计。依次类推。可以看出,上面的系统有八颗CPU。
1.3iostat命令
iostat指令主要用于统计磁盘IO状态,但是也能查看CPU的使用信息,它的局限性是只能显示系统所有CPU的平均信息,看下面的一个输出:
[root@webserver~]#iostat
-c
Linux2.6.9-42.ELsmp(webserver)
11/29/2008
_i686_avg-cpu:
%user
%nice
%system
%iowait
%steal
%idle
2.52
0.00
0.30
0.24
0.00
96.96
在这里,我们使用了“-c”参数,只显示系统CPU的统计信息,输出中每项代表的含义与sar命令的输出项完全相同,不再详述。
1.4uptime命令
uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。看下面的一个输出:
[root@webserver~]#uptime
18:52:11up27days,19:44,
2users,
loadaverage:0.12,0.08,0.08
这里需要注意的是loadaverage这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果loadaverage的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果loadaverage的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
1.5本节小结
上面介绍了检查CPU使用状况的四个命令,通过这些命令需要了解的是:系统CPU是否出现性能瓶颈,也就是说,以上这些命令只能查看CPU是否繁忙,负载是否过大,但是无法知道CPU为何负载过大,因而,判断系统CPU出现问题后,要结合top、ps等命令进一步检查是由那些进程导致CPU负载过大的。引起CPU资源紧缺的原因可能是应用程序不合理造成的,也可能是硬件资源匮乏引起的,所以,要具体问题具体分析,或者优化应用程序,或者增加系统CPU资源。
2内存性能评估
内存的管理和优化是系统性能优化的一个重要部分,内存资源的充足与否直接影响应用系统的使用性能,在进行内存优化之前,一定要熟悉linux的内存管理机制,这一点我们在前面的章节已经有深入讲述,本节的重点是如何通过系统命令监控linux系统的内存使用状况。
2.1free命令
free是监控linux内存使用状况最常用的指令,看下面的一个输出:
[root@webserver~]#free-m
total
used
free
shared
buffers
cached
Mem:
8111
7185
925
0
243
6299
-/+buffers/cache:
643
7468
Swap:
8189
0
8189
“free–m”表示以M为单位查看内存使用情况,在这个输出中,我们重点关注的应该是free列与cached列的输出值,由输出可知,此系统共8G内存,系统空闲内存还有925M,其中,BufferCache占用了243M,PageCache占用了6299M,由此可知系统缓存了很多的文件和目录,而对于应用程序来说,可以使用的内存还有7468M,当然这个7468M包含了BufferCache和PageCache的值。在swap项可以看出,交换分区还未使用。所以从应用的角度来说,此系统内存资源还非常充足。
一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。
free命令还可以适时的监控内存的使用状况,使用“-s”参数可以在指定的时间段内不间断的监控内存的使用情况:
[root@webserver~]#free-b-s5
total
used
free
shared
buffers
cached
Mem:
85059010567528706048
977195008
0
2601123846601158656
-/+buffers/cache:
6674350087838466048
Swap:
8587149312
1638408586985472
total
used
free
shared
buffers
cached
Mem:
85059010567526936576
978964480
0
2601287686601142272
-/+buffers/cache:
6656655367840235520
Swap:
8587149312
1638408586985472
total
used
free
shared
buffers
cached
Mem:
85059010567523987456
981913600
0
2601410566601129984
-/+buffers/cache:
6627164167843184640
Swap:
8587149312
1638408586985472
其中,“-b”表示以千字节(也就是1024字节为单位)来显示内存使用情况。
2.2通过watch与free相结合动态监控内存状况
watch是一个非常有用的命令,几乎每个linux发行版都带有这个工具,通过watch,可以动态的监控命令的运行结果,省去手动执行的麻烦。
可以在watch后面跟上需要运行的命令,watch就会自动重复去运行这个命令,默认是2秒钟执行一次,并把执行的结果更新在屏幕上。例如:
[root@webserver~]#watch-n3-dfree
Every3.0s:free
SunNov3016:23:202008
total
used
free
shared
buffers
cached
Mem:
8306544
7349548
956996
0
203296
6500024
-/+buffers/cache:
646228
7660316
Swap:
8385888
160
8385728
其中,“-n”指定重复执行的时间,“-d”表示高亮显示变动。
2.3vmstat命令监控内存
vmstat命令在监控系统内存方面功能强大,请看下面的一个输出:
procs
memory
swap--
io--system--
cpu
r
b
swpd
freebuff
cache
si
so
bi
bo
in
cs
ussyid
wa
0
0
906440
227961556161325496
340
180
2
4
1
4
80
0
10
10
0
0
906440
427961556161325496
320
289
0
54
1095
287
70
15
0
15
0
0
906440
428841556241325748
236
387
2
102
1064
276
78
2
5
15
对于内存的监控,在vmstat中重点关注的是swpd、si和so行,从这个输出可以看出,此系统内存资源紧缺,swpd占用了900M左右内存,si和so占用很大,而由于系统内存的紧缺,导致出现15%左右的系统等待,此时增加系统的内存是必须要做的。
2.4sar-r命令组合
sar命令也可以监控linux的内存使用状况,可以通过“sar–r”组合查看系统内存和交换空间的使用率。请看下面的一个输出:
[root@webserver~]#sar-r23
Linux2.6.9-42.ELsmp(webserver)
11/30/2008
_i686_
(8CPU)09:57:33PMkbmemfreekbmemused
%memusedkbbuffers
kbcached
kbcommit
%commit
09:57:35PM
897988
7408556
89.19
249428
6496532
786556
4.71
09:57:37PM
898564
7407980
89.18
249428
6496532
784276
4.70
09:57:39PM
899196
7407348
89.17
249440
6496520
782132
4.69
Average:
898583
7407961
89.18
249432
6496528
784321
4.70
其中:
Kbmemfree表示空闲物理内存大小,kbmemused表示已使用的物理内存空间大小,%memused表示已使用内存占总内存大小的百分比,kbbuffers和kbcached分别表示BufferCache和PageCache的大小,kbcommit和%commit分别表示应用程序当前使用的内存大小和使用百分比。
可以看出sar的输出其实与free的输出完全对应,不过sar更加人性化,不但给出了内存使用量,还给出了内存使用的百分比以及统计的平均值。从%commit项可知,此系统目前内存资源充足。
2.5本节小结
上面介绍了内存监控常用的几个指令以及一些经验规则,其实现在的系统在内存方面出现的瓶颈已经很少,因为内存价格很低,充足的内存已经完全能满足应用程序和系统本身的需要,如果系统在内存方面出现瓶颈,很大的可能是应用程序本身的问题造成的。
3磁盘I/O性能评估
在对磁盘I/O性能做评估之前,必须知道的几个方面是:
熟悉RAID存储方式,可以根据应用的不同,选择不同的RAID方式,例如,如果一个应用经常有大量的读操作,可以选择RAID5方式构建磁盘阵列存储数据,如果应用有大量的、频繁的写操作,可以选择raid0存取方式,如果应用对数据安全要求很高,同时对读写也有要求的话,可以考虑raid01存取方式等等。
尽可能用内存的读写代替直接磁盘I/O,使频繁访问的文件或数据放入内存中进行操作处理,因为内存读写操作比直接磁盘读写的效率要高千倍。
将经常进行读写的文件与长期不变的文件独立出来,分别放置到不同的磁盘设备上。
对于写操作频繁的数据,可以考虑使用裸设备代替文件系统。这里简要讲述下文件系统与裸设备的对比:
使用裸设备的优点有:
数据可以直接读写,不需要经过操作系统级的缓存,节省了内存资源,避免了内存资源争用。
避免了文件系统级的维护开销,比如文件系统需要维护超级块、I-node等。
避免了操作系统的cache预读功能,减少了I/O请求。
使用裸设备的缺点是:
数据管理、空间管理不灵活,需要很专业的人来操作。
其实裸设备的优点就是文件系统的缺点,反之也是如此,这就需要我们做出合理的规划和衡量,根据应用的需求,做出对应的策略。
下面接着介绍对磁盘IO的评估标准。
3.1sar-d命令组合
通过“sar–d”组合,可以对系统的磁盘IO做一个基本的统计,请看下面的一个输出:
[root@webserver~]#sar-d23
Linux2.6.9-42.ELsmp(webserver)
11/30/2008
_i686_
(8CPU)11:09:33PM
DEV
tps
rd_sec/swr_sec/s
avgrq-sz
avgqu-sz
await
svctm
%util
11:09:35PMdev8-0
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.0011:09:35PM
DEV
tps
rd_sec/s
wr_sec/s
avgrq-sz
avgqu-sz
await
svctm
%util
11:09:37PMdev8-0
1.00
0.00
12.00
12.00
0.00
0.00
0.00
0.0011:09:37PM
DEV
tps
rd_sec/s
wr_sec/s
avgrq-sz
avgqu-sz
await
svctm
%util
11:09:39PMdev8-0
1.99
0.00
47.76
24.00
0.00
0.50
0.25
0.05Average:
DEV
tps
rd_sec/s
wr_sec/s
avgrq-sz
avgqu-sz
await
svctm
%util
Average:
dev8-0
1.00
0.00
19.97
20.00
0.00
0.33
0.17
0.02
对上面每项的输出解释如下:
DEV表示磁盘设备名称。
tps表示每秒到物理磁盘的传送数,也就是每秒的I/O流量。一个传送就是一个I/O请求,多个逻辑请求可以被合并为一个物理I/O请求。
rd_sec/s表示每秒从设备读取的扇区数(1扇区=512字节)。
wr_sec/s表示每秒写入设备的扇区数目。
avgrq-sz表示平均每次设备I/O操作的数据大小(以扇区为单位)。
avgqu-sz表示平均I/O队列长度。
await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util表示一秒中有百分之几的时间用于I/O操作。
Linux中I/O请求系统与现实生活中超市购物排队系统有很多类似的地方,通过对超市购物排队系统的理解,可以很快掌握linux中I/O运行机制。比如:
avgrq-sz类似与超市排队中每人所买东西的多少。
avgqu-sz类似与超市排队中单位时间内平均排队的人数。
await类似与超市排队中每人的等待时间。
svctm类似与超市排队中收银员的收款速度。
%util类似与超市收银台前有人排队的时间比例。
对以磁盘IO性能,一般有如下评判标准:
正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
3.2iostat–d命令组合
通过“iostat–d”命令组合也可以查看系统磁盘的使用状况,请看如下输出:
[root@webserver~]#
iostat-d23
Linux2.6.9-42.ELsmp(webserver)
12/01/2008
_i686_
(8CPU)Device:
tps
Blk_read/s
Blk_wrtn/s
Blk_read
Blk_wrtn
sda
1.87
2.58
114.12
6479462
286537372Device:
tps
Blk_read/s
Blk_wrtn/s
Blk_read
Blk_wrtn
sda
0.00
0.00
0.00
0
0Device:
tps
Blk_read/s
Blk_wrtn/s
Blk_read
Blk_wrtn
sda
1.00
0.00
12.00
0
24
对上面每项的输出解释如下:
Blk_read/s表示每秒读取的数据块数。
Blk_wrtn/s表示每秒写入的数据块数。
Blk_read表示读取的所有块数
Blk_wrtn表示写入的所有块数。
这里需要注意的一点是:上面输出的第一项是系统从启动以来到统计时的所有传输信息,从第二次输出的数据才代表在检测的时间段内系统的传输值。
可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
“iostat–x”组合还提供了对每个磁盘的单独统计,如果不指定磁盘,默认是对所有磁盘进行统计,请看下面的一个输出:
[root@webserver~]#
iostat-x/dev/sda
23
Linux2.6.9-42.ELsmp(webserver)
12/01/2008
_i686_
(8CPU)avg-cpu:
%user
%nice%system%iowait
%steal
%idle
2.45
0.00
0.30
0.24
0.00
97.03Device:rrqm/s
wrqm/s
r/s
w/s
rsec/s
wsec/savgrq-szavgqu-sz
await
svctm
%util
sda
0.01
12.48
0.10
1.78
2.58
114.03
62.33
0.07
38.39
1.30
0.24avg-cpu:
%user
%nice%system%iowait
%steal
%idle
3.97
0.00
1.83
8.19
0.00
86.14Device:rrqm/swrqm/s
r/s
w/s
rsec/s
wsec/savgrq-szavgqu-sz
await
svctm
%util
sda
0.00
195.00
0.0018.00
0.00
1704.00
94.67
0.04
2.50
0.11
0.20avg-cpu:
%user
%nice%system%iowait
%steal
%idle
4.04
0.00
1.83
8.01
0.00
86.18Device:rrqm/s
wrqm/s
r/s
w/s
rsec/s
wsec/savgrq-szavgqu-sz
await
svctm
%util
sda
0.00
4.50
0.00
7.00
0.00
92.00
13.14
0.01
0.79
0.14
0.10
这个输出基本与“sar–d”相同,需要说明的几个选项的含义为:
rrqm/s表示每秒进行merged的读操作数目。
wrqm/s表示每秒进行merge的写操作数目。
r/s表示每秒完成读I/O设备的次数。
w/s表示每秒完成写I/O设备的次数。
rsec/s表示每秒读取的扇区数。
wsec/s表示每秒写入的扇区数。
3.3vmstat–d组合
通过“vmstat–d”组合也可以查看磁盘的统计数据,情况下面的一个输出:[root@webserver~]#vmstat-d32|grepsda
disk-readswritesIO
total
mergedsectors
ms
total
merged
sectors
ms
cur
sec
sda
23958829282
6481862
10444424538678
32387680295410812
186025580
0
6179
disk-readswritesIO
total
merged
sectors
ms
total
merged
sectors
ms
cur
sec
sda
23958829282
648186210444424538680
32387690295410908186025581
0
6179
这个输出显示了磁盘的reads、writes和IO的使用状况。
3.4本节小结
上面主要讲解了对磁盘I/O的性能评估,其实衡量磁盘I/O好坏是多方面的,有应用程序本身的,也有硬件设计上的,还有系统自身配置的问题等,要解决I/O的瓶颈,关键是要提高I/O子系统的执行效率。例如,首要要从应用程序上对磁盘读写进行优化,能够放到内存执行的操作,尽量不要放到磁盘,同时对磁盘存储方式进行合理规划,选择适合自己的RAID存取方式,最后,在系统级别上,可以选择适合自身应用的文件系统,必要时使用裸设备提高读写性能。
4网络性能评估
网络性能的好坏直接影响应用程序对外提供服务的稳定性和可靠性,监控网络性能,可以从以下几个方面进行管理和优化。
4.1通过ping命令检测网络的连通性
如果发现网络反应缓慢,或者连接中断,可以通过ping来测试网络的连通情况,请看下面的一个输出:
[root@webserver~]#ping54
PING54(54)56(84)bytesofdata.
64bytesfrom54:icmp_seq=0ttl=64time=0.235ms
64bytesfrom54:icmp_seq=1ttl=64time=0.164ms
64bytesfrom54:icmp_seq=2ttl=64time=0.210ms
64bytesfrom54:icmp_seq=3ttl=64time=0.178ms
64bytesfrom54:icmp_seq=4ttl=64time=0.525ms
64bytesfrom54:icmp_seq=5ttl=64time=0.571ms
64bytesfrom54:icmp_seq=6ttl=64time=0.220ms
54pingstatistics
7packetstransmitted,7received,0%packetloss,time6000ms
rttmin/avg/max/mdev=0.164/0.300/0.571/0.159ms,pipe2
在这个输出中,time值显示了两台主机之间的网络延时情况,如果此值很大,则表示网络的延时很大,单位为毫秒。在这个输出的最后,是对上面输出信息的一个总结,packetloss表示网络的丢包率,此值越小,表示网络的质量越高。
4.2通过netstat–i组合检测网络接口状况
netstat命令提供了网络接口的详细信息,请看下面的输出:
[root@webserver~]#netstat-i
KernelInterfacetable
IfaceMTU
MetRX-OK
RX-ERRRX-DRPRX-OVR
TX-OK
TX-ERRTX-DRPTX-OVR
Flg
eth0
1500
01313129253
0
0
0
1320686497
0
0
0
BMRU
eth1
1500
0494902025
0
0
0
292358810
0
0
0
BMRU
lo
16436
041901601
0
0
0
41901601
0
0
0
LRU
对上面每项的输出解释如下:
Iface表示网络设备的接口名称。
MTU表示最大传输单元,单位字节。
RX-OK/TX-OK表示已经准确无误的接收/发送了多少数据包。
RX-ERR/TX-ERR表示接收/发送数据包时产生了多少错误。
RX-DRP/TX-DRP表示接收/发送数据包时丢弃了多少数据包。
RX-OVR/TX-OVR表示由于误差而遗失了多少数据包。
Flg表示接口标记,其中:
L:表示该接口是个回环设备。
B:表示设置了广播地址。
M:表示接收所有数据包。
R:表示接口正在运行。
U:表示接口处于活动状态。
O:表示在该接口上禁用arp。
P:表示一个点到点的连接。
正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。
当网络传输存在问题是,可以检测网卡设备是否存在故障,如果可能,可以升级为千兆网卡或者光纤网络,还可以检查网络部署环境是否合理。
4.3通过netstat–r组合检测系统的路由表信息
在网络不通,或者网络异常时,首先想到的就是检查系统的路由表信息,“netstat–r”的输出结果与route命令的输出完全相同,请看下面的一个实例:
[root@webserver~]#
netstat-r
KernelIProutingtable
Destination
Gateway
Genmask
Flags
MSSWindow
irttIface
*
U
0
0
0
eth0
*
U
0
0
0
eth1
*
U
0
0
0
eth1
default
54
UG
0
0
0
eth0
关于输出中每项的具体含义,已经在前面章节进行过详细介绍,这里不再多讲,这里我们重点关注的是default行对应的值,default项表示系统的默认路由,对应的网络接口为eth0。
4.4通过sar–n组合显示系统的网络运行状态
sar提供四种不同的选项来显示网络统计信息,通过“-n”选项可以指定4个不同类型的开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,FULL显示所有三个开关。请看下面的一个输出:
[root@webserver~]#sar-nDEV23
Linux2.6.9-42.ELsmp(webserver)
12/01/2008
_i686_
(8CPU)02:22:31PM
IFACE
rxpck/s
txpck/s
rxkB/s
txkB/s
rxcmp/s
txcmp/s
rxmcst/s
02:22:33PM
lo
31.34
31.34
37.53
37.53
0.00
0.00
0.00
02:22:33PM
eth0
199.50
279.60
17.29
344.12
0.00
0.00
0.00
02:22:33PM
eth1
5.47
4.98
7.03
0.36
0.00
0.00
0.00
02:22:33PM
sit0
0.00
0.00
0.00
0.00
0.00
0.00
0.0002:22:33PM
IFACE
rxpck/s
txpck/s
rxkB/s
txkB/s
rxcmp/s
txcmp/s
rxmcst/s
02:22:35PM
lo
67.66
67.66
74.34
74.34
0.00
0.00
0.00
02:22:35PM
eth0
159.70
222.39
19.74
217.16
0.00
0.00
0.00
02:22:35PM
eth1
3.48
4.48
0.44
0.51
0.00
0.00
0.00
02:22:35PM
sit0
0.00
0.00
0.00
0.00
0.00
0.00
0.0002:22:35PM
IFACE
rxpck/s
txpck/s
rxkB/s
txkB/s
rxcmp/s
txcmp/s
rxmcst/s
02:22:37PM
lo
4.52
4.52
9.25
9.25
0.00
0.00
0.00
02:22:37PM
eth0
102.51
133.67
20.67
116.14
0.00
0.00
0.00
02:22:37PM
eth1
27.14
67.34
2.42
89.26
0.00
0.00
0.00
02:22:37PM
sit0
0.00
0.00
0.00
0.00
0.00
0.00
0.00Average:
IFACE
rxpck/s
txpck/s
rxkB/s
txkB/s
rxcmp/s
txcmp/s
rxmcst/s
Average:
lo
34.61
34.61
40.48
40.48
0.00
0.00
0.00
Average:
eth0
154.08
212.15
19.23
226.17
0.00
0.00
0.00
Average:
eth1
11.98
25.46
3.30
29.85
0.00
0.00
0.00
Average:
sit0
0.00
0.00
0.00
0.00
0.00
0.00
0.00
对上面每项的输出解释如下:
IFACE表示网络接口设备。
rxpck/s表示每秒钟接收的数据包大小。
txpck/s表示每秒钟发送的数据包大小。
rxkB/s表示每秒钟接收的字节数。
txkB/s表示每秒钟发送的字节数。
rxcmp/s表示每秒钟接收的压缩数据包。
txcmp/s表示每秒钟发送的压缩数据包。
rxmcst/s表示每秒钟接收的多播数据包。
通过“sar–n”的输出,可以清楚的显示网络接口发送、接收数据的统计信息。此外还可以通过“sar-nEDEV23”来统计网络错误信息等。
4.5小结
本节通过几个常用的网络命令介绍了对网络性能的评估,事实上,网络问题是简单而且容易处理的,只要我们根据上面给出的命令,一般都能迅速定位问题。解决问题的方法一般是增加网络带宽,或者优化网络部署环境。
CPU利用率:Linux以及大多数基于UNIX的操作系统都提供了一条命令来显示系统的平均负载(loadaverage):具体的讲,平均负载代表了在1min,5min和15min内可以运行的任务平均数。可运行的任务包括当前正在运行的任务以及虽然可以运行但正在等待某个处理器空闲的任务。我这里只有一个CPU,且0.31,0.46,0.21均小于1.00,这表明处理器仍拥有额外的空闲周期。同理如果有两个CPU,且loadaverage均小于2.00的话,这同样表明处理器拥有额外的空闲周期。然后负载平均值单独并不能说明所有问题。为了更深入地探究处理器的使用情况,下面介绍几种工具可以提供许多关于CPU利用的不同理解:1)vmstat一个实时性能监视工具。该工具提供了有助于发现系统异常活动的数据。上面的命令是每1s输出vmstat的信息,共10次,具体说明如下:Procs:提供了在生成报告时正在运行的进程数目(r)以及被阻塞的进程数目(b)Memory:提供了换出内存(swpd),空闲内存(free),IO数据结构的缓存区缓存(buff)以及从磁盘读取文件的内存缓存(cache)的容量。单位为KB.Swap:提供了从磁盘上换入内存容量(si)以及换出到磁盘上的内存量(so),单位为KB/s.so反应了当数据被换出至交换区时kswapd的情况,而si则反映了当页面被换回到物理内存时发生页面错误的情况。io:提供了从设备读入的块数(bi)以及写出到设备上的块数(bo),单位为KB/s。System:提供了每秒的中断数目(in)和上下文切换数目(cs).Cpu:提供了用户(us),系统(sy),真正空闲(id)以及等待I/O完成(wa)在cpu总时间中所占的百分比。2)top与gtop它可以显示哪些进程是活跃的以及哪些进程消耗的处理时间或内存最多。top命令对于所有正在运行的进程和系统负载提供不断更新的概览信息。包括cpu负载,内存使用以及每个进程的内存使用情况。默认情况下,top输出经常刷新,且把任务基于CPU占用时间的百分比排序。对图详细解释如下:第一行:显示正常运行的时间,包括当前时间,系统上次重启后已运行的时间和当前用户数量以及3个用于表示在先前1min,5min,15min内准备运行的平均处理器数目的平均负荷值。第二行:给出进程的统计信息。包括正在运行的进程总数。具体还有正在运行的,睡眠的,僵尸的和已停止进程的数目。第三和四行:显示各个的统计信息。包括用户进程,系统进程,niced进程(优先进程)以及空闲进程所占用的cpu的时间比。第五行提供内存统计信息。包括内存总量,已用内存,空闲内存,不同进程共享的内存以及缓存内存。第六行显示虚存或交换活动的统计信息,包括交换空间总量,已经使用的,空闲的和缓存空间大小。具体到统计信息的每一行,看下边:PID:每个进程的ID;USER:每个进程所有者的用户名;PR:每个进程的优先级别;NI:该进程的优先级值;VIRT:虚拟内存;RES:常驻内存;SHR:共享内存;%CPU:该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比;%MEM:内存使用率,该进程占用的物理内存占总内存的百分比;TIME:该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME;COMMAND:该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行.3)sar它收集包括CPU利用率,上下文切换和中断速率,页换入和页换出速率,共享内存的使用情况,缓冲区使用情况以及网络使用情况。它常常用于确定事件的时间,也可用于标识特定的系统行为变化。Sar可以使用更短的时间间隔或固定数目的时间间隔来输出信息,sar可以为所收集的许多数据点提供平均信息。sar命令的选项很多,下面只列出常用选项:-A:所有报告的总和。-u:CPU利用率-v:进程、I节点、文件和锁表状态。-d:硬盘使用报告。-r:没有使用的内存页面和硬盘块。-g:串口I/O的情况。-b:缓冲区使用情况。-a:文件读写情况。-c:系统调用情况。-R:进程的活动情况。-y:终端设备活动情况。-w:系统交换活动。以上每2秒采样一次,连续采样5次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件zhou中。如果要查看二进制文件zhou中的内容,则需键入如下sar命令:
#sar-u-fzhou
可见,sar命令即能实时采样,又能对以往的采样结果进行查询。在显示内容包括:
CPUall表示统计信息为所有CPU的平均值。
%user显示在用户级别(application)运行使用CPU总时间的百分比。
%nice显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%system在核心级别(kernel)运行所使用CPU总时间的百分比。
%iowait显示用于等待I/O操作占用CPU总时间的百分比。
%steal管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
%idle显示CPU空闲时间占用CPU总时间的百分比。内存利用率:1)/proc/meminfo与/proc/slabinfo这两个文件可以捕获物理内存的状况。要理解内核内存使用的情况,可以查看/proc/slabinfo文件。MemTotal:所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)
MemFree:LowFree与HighFree的总和,被系统留着未使用的内存
Buffers:用来给文件做缓冲大小
Cached:被高速缓冲存储器(cachememory)用的内存的大小(等于diskcacheminusSwapCache)
SwapCached:被高速缓冲存储器(cachememory)用的交换空间的大小
已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active:在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
Inactive:在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
HighTotal:
HighFree:该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
LowTotal:
LowFree:低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。SwapTotal:交换空间的总大小
SwapFree:未被使用交换空间的大小
Dirty:等待被写回到磁盘的内存大小。
Writeback:正在被写回到磁盘的内存大小。
AnonPages:未映射页的内存大小
Mapped:设备和文件等映射的大小。Slab:内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:可收回Slab的大小
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
PageTables:管理内存分页页面的索引表的大小。
NFS_Unstable:不稳定页表的大小
VmallocTotal:可以vmalloc虚拟内存大小
VmallocUsed:已经被使用的虚拟内存大小。这是其中的部分截图:第一列:内核数据结构的名称。第二列:活跃的第三列:总数第四列:每个数据结构占用大小第五列:至少拥有一个活动对象的页面数第六列:已经分配页面的总数第七列:每个slab结构所分配的页面数2)ps获取特定进程中的内存使用情况.ps的参数非常多,在此仅列出几个常用的参数并大略介绍含义
-A列出所有的行程
-w显示加宽可以显示较多的资讯
-au显示较详细的资讯
-aux显示所有包含其他使用者的行程说明:USER:行程拥有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码(minordevicenumberoftty)
STAT:该行程的状态:
D:不可中断的静止R:正在执行中
S:静止状态
T:暂停执行
Z:不存在但暂时无法消除
W:没有足够的记忆体分页可分配<:高优先序的行程N:低优先序的行程
L:有记忆体分页分配并锁在记忆体内(即时系统或捱AI/O)
START:行程开始时间
TIME:执行的时间
COMMAND:所执行的指令当标识出需要关注的进程后,可以查看这些进程的虚拟地址布局,从而获知进程当前使用内存的具体分配情况。/proc/pid/maps包含了进程地址空间的所有映射及其大小。从左到右依次是:被分配的地址范围;虚拟内存的许可权限;虚拟内存区域在被映射文件中的偏移量;映像文件的主设备号和次设备号;设备的节点号,0表示没有节点与内存相对应;被映射文件的文件名3)vmstat主要目的是监视内存可用性和交换活动,还提供io活动的概况。IO利用率1)iostat监视系统IO活动,检查物理磁盘就平均传输率而言处于活动状态之中的时间长度。iostat命令生成四种类型的报告,tty和CPU使用率报告、磁盘使用率报告、系统吞吐量报告和适配器吞吐量报告。·tps
发至逻辑磁盘的IO请求数·Blk_read/s
每秒读入块数·Blk_wrtn/s
每秒写入块数·Blk_read
读取总块数·Blk_wrtn
写入总块数2)sar(略)网络利用率1)netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。常用选项:–s:本选项能够按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。–e:本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。–r:本选项可以显示关于路由表的信息,类似于后面所讲使用routeprint命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。–a:本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。–n:显示所有已建立的有效连接netstat–i从做到右依次是接口名,MTU以及接收和发送报文中传输成功的通过某种方式出错的,丢弃的或溢出的报文数。netstat–snetstat工具显示了存在于内核中的大多数计数器,但并未涵盖全部计数器。要查看计数器的完整列表,可以浏览/proc/net/snmp和/proc/net/netstat文件的内容。查看内存利用率可以考虑用free命令,free-m是比较好用。
看看网络流量的话可以考虑用iptraf。需要装包,iostat需要装包Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存、CPU、硬盘……)出了问题。在Linux系统中,所有的运行参数保存在虚拟目录/proc中,换句话说,我们使用的性能监控工具取到的数据值实际上就是源自于这个目录,当涉及到系统高估时,我们就可以修改/proc目录中的相关参数了,当然有些是不能乱改的。下面就让我们了解一下这些常用的性能监控工具。
1、uptime
uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。
uptime的输出包含一项内容是loadaverage,显示了最近1,5,15分钟的负荷情况。它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,loadaverage值会升高;反之则会降低。
loadaverage的最佳值是1,说明每个进程都可以马上处理并且没有CPUcycles被丢失。对于单CPU的机器,1或者2是可以接受的值;对于多路CPU的机器,loadaverage值可能在8到10之间。
也可以使用uptime命令来判断网络性能。例如,某个网络应用性能很低,通过运行uptime查看服务器的负荷是否很高,如果不是,那么问题应该是网络方面造成的。
以下是uptime的运行实例:
9:24amup19:06,1user,loadaverage:0.00,0.00,0.00
也可以查看/proc/loadavg和/proc/uptime两个文件,注意不能编辑/proc中的文件,要用cat等命令来查看,如:
liyawei:~#cat/proc/loadavg
0.000.000.001/555505
2、dmesg
dmesg命令主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。
另外,使用dmesg可以确定您的服务器安装了那些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。执行/bin/dmesg命令可以查看该记录。
dmesg输入实例:
ReiserFS:hda6:checkingtransactionlog(hda6)
ReiserFS:hda6:Usingr5hashtosortnames
Adding1044184kswapon/dev/hda5.Priority:-1extents:1across:1044184k
parport_pc:VIA686A/8231detected
parport_pc:probingcurrentconfiguration
parport_pc:Currentparallelportbase:0x378
parport0:PC-styleat0x378(0x778),irq7,usingFIFO[PCSPP,TRISTATE,COMPAT,ECP]parport_pc:VIAparallelport:io=0x378,irq=7
lp0:usingparport0(interrupt-driven).
e100:Intel(R)PRO/100NetworkDriver,3.5.10-k2-NAPI
e100:Copyright(c)1999-2005IntelCorporation
ACPI:PCIInterrupt0000:00:0d.0[A]->GSI17(level,low)->IRQ169
e100:eth0:e100_probe:addr0xd8042000,irq169,MACaddr00:02:55:1E:35:91
usbcore:registerednewdriverusbfs
usbcore:registerednewdriverhub
hdc:ATAPI48XCD-ROMdrive,128kBCache,UDMA(33)
UniformCD-ROMdriverRevision:3.20
USBUniversalHostControllerInterfacedriverv2.3
3、top
top命令显示处理器的活动状况。缺省情况下,显示占用CPU最多的任务,并且每隔5秒钟做一次刷新。
Processpriority的数值决定了CPU处理进程的顺序。LIUNX内核会根据需要调整该数值的大小。nicevalue局限于priority。priority的值不能低于nicevalue(nicevalue值越低,优先级越高)。您不可以直接修改Processpriority的值,但是可以通过调整nicelevel值来间接地改变Processpriority值,然而这一方法并不是所有时候都可用。如果某个进程运行异常的慢,可以通过降低nicelevel为该进程分配更多的CPU。
Linux支持的nicelevels由19(优先级低)到-20(优先级高),缺省值为0。
执行/bin/ps命令可以查看到当前进程的情况。
4、iostat
iostat由RedHatEnterpriseLinuxAS发布。同时iostat也是Sysstat的一部分,可以下载到,网址是http://perso.wanadoo.fr/sebastien.godard/
执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分:CPU使用情况和磁盘使用情况。
iostat显示实例:
avg-cpu:%user%nice%system%iowait%steal%idle
0.160.010.030.100.0099.71
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn
hda0.314.654.12327796290832avg-cpu:%user%nice%system%iowait%steal%idle
1.000.000.000.000.00100.00
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn
hda0.000.000.0000
avg-cpu:%user%nice%system%iowait%steal%idle
0.000.000.000.000.0099.01
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn
hda0.000.000.0000
CPU占用情况包括四块内容
%user:显示userlevel(applications)时,CPU的占用情况。
%nice:显示userlevel在nicepriority时,CPU的占用情况。
%sys:显示systemlevel(kernel)时,CPU的占用情况。
%idle:显示CPU空闲时间所占比例。
磁盘使用报告分成以下几个部分:
Device:块设备的名字
tps:该设备每秒I/O传输的次数。多个I/O请求可以组合为一个,每个I/O请求传输的字节数不同,因此可以将多个I/O请求合并为一个。
Blk_read/s,Blk_wrtn/s:表示从该设备每秒读写的数据块数量。块的大小可以不同,如1024,2048或4048字节,这取决于partition的大小。
例如,执行下列命令获得设备/dev/sda1的数据块大小:
dumpe2fs-h/dev/sda1|grep-F"Blocksize"
输出结果如下
dump
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年菏泽市牡丹区法检系统书记员招聘考试试题及答案详解
- 2026单招护理实操面试题目及答案
- 2026单招面试题目合集及答案
- 能源与动力工程基础工作手册
- 果树花期管理与授粉手册
- 南亚国家信息技术行业市场供需分析投资评估布局战略研究
- 2026三上数学第七单元情境课件
- 2025届福建省福州市马尾区四年级数学下学期期中试题(含答案解析)
- 剖腹产术后伤口护理的注意事项
- 糖尿病患者的饮食与疼痛管理
- 南充市公安局2026年上半年第二次公开招聘警务辅助人员(20人)笔试参考题库及答案详解
- 消防救援支队公开招聘工作人员笔试试题(含详细答案)
- XX区企业厂界噪声监测报告
- 快速康复外科理念eras与围手术期护理课件
- 装潢材料购买合同范本
- 2026年陕西省中考语文真题
- 2026云南九九彩印有限公司毕业生招聘25人考试备考试题及答案详解
- 鸡苗养殖购买合同
- 2026年供应链管理三级试题及答案
- 漏电保护器安全使用与安装规范培训
- 道路运输企业安全员安全培训记录表
评论
0/150
提交评论