Linux系统性能优化命令与工具大全_第1页
Linux系统性能优化命令与工具大全_第2页
Linux系统性能优化命令与工具大全_第3页
Linux系统性能优化命令与工具大全_第4页
Linux系统性能优化命令与工具大全_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

细说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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论