- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章老牌运维教你如何快速分析Linux服务器的性能问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
作为一名linux系统运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性 和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题, 本章从系统入手,重点讲述由于系统软、硬件配置不当可能造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程.
1 cpu性能评估 。
Cpu是影响Linux性能的主要因素之一,下面先介绍几个查看CPU性能的命令.
1.1 vmstat命令 。
该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况.
下面是vmstat命令在某个系统的输出结果:
[root@node1~]#vmstat23 。
procs———–memory———-—swap–—–io—-–system–—–cpu—— 。
rbswpdfreebuffcachesisobiboincsussyidwast 。
000162240830467032001321100723019800 。
00016224083046703200101010200110000 。
0001622408304670320011100918019900 。
对上面每项的输出解释如下:
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:24AMCPU%user%nice%system%iowait%steal%idle 。
11:41:27AMall0.880.000.290.000.0098.83 。
11:41:30AMall0.130.000.170.210.0099.50 。
11:41:33AMall0.040.000.040.000.0099.92 。
11:41:36AMall0.290.000.130.000.0099.58 。
11:41:39AMall0.380.000.170.040.0099.41 。
Average:all0.340.000.160.050.0099.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:33PMCPU%user%nice%system%iowait%steal%idle 。
06:29:36PM03.000.000.330.000.0096.67 。
06:29:39PM00.670.000.330.000.0099.00 。
06:29:42PM00.000.000.330.000.0099.67 。
06:29:45PM00.670.000.330.000.0099.00 。
06:29:48PM01.000.000.330.330.0098.34 。
Average:01.070.000.330.070.0098.53 。
这个输出是对系统的第一颗CPU的信息统计,需要注意的是,sar中对CPU的计数是从0开始的,因此,“sar -P 0 3 5”表示对系统的第一颗CPU进行信息统计,“sar -P 4 3 5”则表示对系统的第五颗CPU进行统计。依次类推。可以看出,上面的系统有八颗CPU.
1.3 iostat命令 。
iostat指令主要用于统计磁盘IO状态,但是也能查看CPU的使用信息,它的局限性是只能显示系统所有CPU的平均信息,看下面的一个输出:
[root@webserver~]#iostat-c 。
Linux2.6.9-42.ELsmp(webserver)11/29/2008_i686_(8CPU) 。
avg-cpu:%user%nice%system%iowait%steal%idle 。
2.520.000.300.240.0096.96 。
在这里,我们使用了“-c”参数,只显示系统CPU的统计信息,输出中每项代表的含义与sar命令的输出项完全相同,不再详述.
1.4 uptime命令 。
uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。看下面的一个输出:
[root@webserver~]#uptime 。
18:52:11up27days,19:44,2users,loadaverage:0.12,0.08,0.08 。
这里需要注意的是load average这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的.
1.5 本节小结 。
上面介绍了检查CPU使用状况的四个命令,通过这些命令需要了解的是:系统CPU是否出现性能瓶颈,也就是说,以上这些命令只能查看CPU是否繁忙,负载是否过大,但是无法知道CPU为何负载过大,因而,判断系统CPU出现问题后,要结合top、ps等命令进一步检查是由那些进程导致CPU负载过大的。引起CPU资源紧缺的原因可能是应用程序不合理造成的,也可能是硬件资源匮乏引起的,所以,要具体问题具体分析,或者优化应用程序,或者增加系统CPU资源.
2 内存性能评估 。
内存的管理和优化是系统性能优化的一个重要部分,内存资源的充足与否直接影响应用系统的使用性能,在进行内存优化之前,一定要熟悉linux的内存管理机制,这一点我们在前面的章节已经有深入讲述,本节的重点是如何通过系统命令监控linux系统的内存使用状况.
2.1 free 命令 。
free是监控linux内存使用状况最常用的指令,看下面的一个输出:
[root@webserver~]#free-m 。
totalusedfreesharedbufferscached 。
Mem:8111718592502436299 。
-/+buffers/cache:6437468 。
Swap:818908189 。
“free –m”表示以M为单位查看内存使用情况,在这个输出中,我们重点关注的应该是free列与cached列的输出值,由输出可知,此系统共8G内存,系统空闲内存还有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系统缓存了很多的文件和目录,而对于应用程序来说,可以使用的内存还有7468M,当然这个7468M包含了Buffer Cache和Page Cache的值。在swap项可以看出,交换分区还未使用。所以从应用的角度来说,此系统内存资源还非常充足.
一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能.
free命令还可以适时的监控内存的使用状况,使用“-s”参数可以在指定的时间段内不间断的监控内存的使用情况:
[root@webserver~]#free-b-s5 。
totalusedfreesharedbufferscached 。
Mem:8505901056752870604897719500802601123846601158656 。
-/+buffers/cache:6674350087838466048 。
Swap:85871493121638408586985472 。
totalusedfreesharedbufferscached 。
Mem:8505901056752693657697896448002601287686601142272 。
-/+buffers/cache:6656655367840235520 。
Swap:85871493121638408586985472 。
totalusedfreesharedbufferscached 。
Mem:8505901056752398745698191360002601410566601129984 。
-/+buffers/cache:6627164167843184640 。
Swap:85871493121638408586985472 。
其中,“-b”表示以千字节(也就是1024字节为单位)来显示内存使用情况.
2.2 通过watch与free相结合动态监控内存状况 。
watch是一个非常有用的命令,几乎每个linux发行版都带有这个工具,通过watch,可以动态的监控命令的运行结果,省去手动执行的麻烦.
可以在watch后面跟上需要运行的命令,watch就会自动重复去运行这个命令,默认是2秒钟执行一次,并把执行的结果更新在屏幕上。例如:
[root@webserver~]#watch-n3-dfree 。
Every3.0s:freeSunNov3016:23:202008 。
totalusedfreesharedbufferscached 。
Mem:8306544734954895699602032966500024 。
-/+buffers/cache:6462287660316 。
Swap:83858881608385728 。
其中,“-n”指定重复执行的时间,“-d”表示高亮显示变动.
2.3 vmstat命令监控内存 。
vmstat命令在监控系统内存方面功能强大,请看下面的一个输出:
procs———–memory———-—swap–—–io—-–system–—-cpu—- 。
rbswpdfreebuffcachesisobiboincsussyidwa 。
0090644022796155616132549634018024148001010 。
0090644042796155616132549632028905410952877015015 。
0090644042884155624132574823638721021064276782515 。
对于内存的监控,在vmstat中重点关注的是swpd、si和so行,从这个输出可以看出,此系统内存资源紧缺,swpd占用了900M左右内存,si和so占用很大,而由于系统内存的紧缺,导致出现15%左右的系统等待,此时增加系统的内存是必须要做的.
2.4 sar -r命令组合 。
sar命令也可以监控linux的内存使用状况,可以通过“sar –r”组合查看系统内存和交换空间的使用率。请看下面的一个输出:
[root@webserver~]#sar-r23 。
Linux2.6.9-42.ELsmp(webserver)11/30/2008_i686_(8CPU) 。
09:57:33PMkbmemfreekbmemused%memusedkbbufferskbcachedkbcommit%commit 。
09:57:35PM897988740855689.1924942864965327865564.71 。
09:57:37PM898564740798089.1824942864965327842764.70 。
09:57:39PM899196740734889.1724944064965207821324.69 。
Average:898583740796189.1824943264965287843214.70 。
其中:
Kbmemfree表示空闲物理内存大小,kbmemused表示已使用的物理内存空间大小,%memused表示已使用内存占总内存大小的百分比,kbbuffers和kbcached分别表示Buffer Cache和Page Cache的大小,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.1 sar -d命令组合 。
通过“sar –d”组合,可以对系统的磁盘IO做一个基本的统计,请看下面的一个输出:
[root@webserver~]#sar-d23 。
Linux2.6.9-42.ELsmp(webserver)11/30/2008_i686_(8CPU) 。
11:09:33PMDEVtpsrd_sec/swr_sec/savgrq-szavgqu-szawaitsvctm%util 。
11:09:35PMdev8-00.000.000.000.000.000.000.000.00 。
11:09:35PMDEVtpsrd_sec/swr_sec/savgrq-szavgqu-szawaitsvctm%util 。
11:09:37PMdev8-01.000.0012.0012.000.000.000.000.00 。
11:09:37PMDEVtpsrd_sec/swr_sec/savgrq-szavgqu-szawaitsvctm%util 。
11:09:39PMdev8-01.990.0047.7624.000.000.500.250.05 。
Average:DEVtpsrd_sec/swr_sec/savgrq-szavgqu-szawaitsvctm%util 。
Average:dev8-01.000.0019.9720.000.000.330.170.02 。
对上面每项的输出解释如下:
DEV表示磁盘设备名称.
tps表示每秒到物理磁盘的传送数,也就是每秒的I/O流量。一个传送就是一个I/O请求,多个逻辑请求可以被合并为一个物理I/O请求.
d_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.2 iostat –d命令组合 。
通过“iostat –d”命令组合也可以查看系统磁盘的使用状况,请看如下输出:
[root@webserver~]#iostat-d23 。
inux2.6.9-42.ELsmp(webserver)12/01/2008_i686_(8CPU) 。
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn 。
da1.872.58114.126479462286537372 。
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn 。
da0.000.000.0000 。
Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn 。
da1.000.0012.00024 。
对上面每项的输出解释如下:
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/sda23 。
Linux2.6.9-42.ELsmp(webserver)12/01/2008_i686_(8CPU) 。
avg-cpu:%user%nice%system%iowait%steal%idle 。
2.450.000.300.240.0097.03 。
Device:rrqm/swrqm/sr/sw/srsec/swsec/savgrq-szavgqu-szawaitsvctm%util 。
sda0.0112.480.101.782.58114.0362.330.0738.391.300.24 。
avg-cpu:%user%nice%system%iowait%steal%idle 。
3.970.001.838.190.0086.14 。
Device:rrqm/swrqm/sr/sw/srsec/swsec/savgrq-szavgqu-szawaitsvctm%util 。
sda0.00195.000.0018.000.001704.0094.670.042.500.110.20 。
avg-cpu:%user%nice%system%iowait%steal%idle 。
4.040.001.838.010.0086.18 。
Device:rrqm/swrqm/sr/sw/srsec/swsec/savgrq-szavgqu-szawaitsvctm%util 。
sda0.004.500.007.000.0092.0013.140.010.790.140.10 。
这个输出基本与“sar –d”相同,需要说明的几个选项的含义为:
rrqm/s表示每秒进行merged的读操作数目.
wrqm/s表示每秒进行 merge 的写操作数目.
r/s表示每秒完成读I/O设备的次数.
w/s表示每秒完成写I/O设备的次数.
rsec/s表示每秒读取的扇区数.
wsec/s表示每秒写入的扇区数.
3.3 vmstat –d组合 。
通过“vmstat –d”组合也可以查看磁盘的统计数据,情况下面的一个输出:
[root@webserver~]#vmstat-d32|grepsda 。
disk-————reads————————writes———–—–IO—— 。
totalmergedsectorsmstotalmergedsectorsmscursec 。
sda239588292826481862104444245386783238768029541081218602558006179 。
disk-————reads————————writes———–—–IO—— 。
totalmergedsectorsmstotalmergedsectorsmscursec 。
sda239588292826481862104444245386803238769029541090818602558106179 。
这个输出显示了磁盘的reads、writes和IO的使用状况.
3.4 本节小结 。
上面主要讲解了对磁盘I/O的性能评估,其实衡量磁盘I/O好坏是多方面的,有应用程序本身的,也有硬件设计上的,还有系统自身配置的问题等,要解决I/O的瓶颈,关键是要提高I/O子系统的执行效率。例如,首要要从应用程序上对磁盘读写进行优化,能够放到内存执行的操作,尽量不要放到磁盘,同时对磁盘存储方式进行合理规划,选择适合自己的RAID存取方式,最后,在系统级别上,可以选择适合自身应用的文件系统,必要时使用裸设备提高读写性能.
4 网络性能评估 。
网络性能的好坏直接影响应用程序对外提供服务的稳定性和可靠性,监控网络性能,可以从以下几个方面进行管理和优化.
4.1 通过ping命令检测网络的连通性 。
如果发现网络反应 缓慢,或者连接中断,可以通过ping来测试网络的连通情况,请看下面的一个输出:
[root@webserver~]#ping10.10.1.254 。
PING10.10.1.254(10.10.1.254)56(84)bytesofdata. 。
64bytesfrom10.10.1.254:icmp_seq=0ttl=64time=0.235ms 。
64bytesfrom10.10.1.254:icmp_seq=1ttl=64time=0.164ms 。
64bytesfrom10.10.1.254:icmp_seq=2ttl=64time=0.210ms 。
64bytesfrom10.10.1.254:icmp_seq=3ttl=64time=0.178ms 。
64bytesfrom10.10.1.254:icmp_seq=4ttl=64time=0.525ms 。
64bytesfrom10.10.1.254:icmp_seq=5ttl=64time=0.571ms 。
64bytesfrom10.10.1.254:icmp_seq=6ttl=64time=0.220ms 。
—10.10.1.254pingstatistics— 。
7packetstransmitted,7received,0%packetloss,time6000ms 。
rttmin/avg/max/mdev=0.164/0.300/0.571/0.159ms,pipe2 。
在这个输出中,time值显示了两台主机之间的网络延时情况,如果此值很大,则表示网络的延时很大,单位为毫秒。在这个输出的最后,是对上面输出信息的一个总结,packet loss表示网络的丢包率,此值越小,表示网络的质量越高.
4.2 通过netstat –i组合检测网络接口状况 。
netstat命令提供了网络接口的详细信息,请看下面的输出:
[root@webserver~]#netstat-i 。
KernelInterfacetable 。
IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg 。
eth01500013131292530001320686497000BMRU 。
eth115000494902025000292358810000BMRU 。
lo1643604190160100041901601000LRU 。
对上面每项的输出解释如下:
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 。
DestinationGatewayGenmaskFlagsMSSWindowirttIface 。
10.10.1.0*255.255.255.0U000eth0 。
192.168.200.0*255.255.255.0U000eth1 。
169.254.0.0*255.255.0.0U000eth1 。
default10.10.1.2540.0.0.0UG000eth0 。
关于输出中每项的具体含义,已经在前面章节进行过详细介绍,这里不再多讲,这里我们重点关注的是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:31PMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s 。
02:22:33PMlo31.3431.3437.5337.530.000.000.00 。
02:22:33PMeth0199.50279.6017.29344.120.000.000.00 。
02:22:33PMeth15.474.987.030.360.000.000.00 。
02:22:33PMsit00.000.000.000.000.000.000.00 。
02:22:33PMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s 。
02:22:35PMlo67.6667.6674.3474.340.000.000.00 。
02:22:35PMeth0159.70222.3919.74217.160.000.000.00 。
02:22:35PMeth13.484.480.440.510.000.000.00 。
02:22:35PMsit00.000.000.000.000.000.000.00 。
02:22:35PMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s 。
02:22:37PMlo4.524.529.259.250.000.000.00 。
02:22:37PMeth0102.51133.6720.67116.140.000.000.00 。
02:22:37PMeth127.1467.342.4289.260.000.000.00 。
02:22:37PMsit00.000.000.000.000.000.000.00 。
Average:IFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s 。
Average:lo34.6134.6140.4840.480.000.000.00 。
Average:eth0154.08212.1519.23226.170.000.000.00 。
Average:eth111.9825.463.3029.850.000.000.00 。
Average:sit00.000.000.000.000.000.000.00 。
对上面每项的输出解释如下:
IFACE表示网络接口设备.
rxpck/s表示每秒钟接收的数据包大小.
txpck/s表示每秒钟发送的数据包大小.
rxkB/s表示每秒钟接收的字节数.
txkB/s表示每秒钟发送的字节数.
rxcmp/s表示每秒钟接收的压缩数据包.
txcmp/s表示每秒钟发送的压缩数据包.
rxmcst/s表示每秒钟接收的多播数据包.
通过“sar –n”的输出,可以清楚的显示网络接口发送、接收数据的统计信息。此外还可以通过“sar -n EDEV 2 3”来统计网络错误信息等.
4.5 小结 。
本节通过几个常用的网络命令介绍了对网络性能的评估,事实上,网络问题是简单而且容易处理的,只要我们根据上面给出的命令,一般都能迅速定位问题。解决问题的方法一般是增加网络带宽,或者优化网络部署环境.
除了上面介绍的几个命令外,排查网络问题经常用到的命令还有traceroute,主要用于跟踪数据包的传输路径,还有nslookup命令,主要用于判断DNS解析信息.
最后此篇关于老牌运维教你如何快速分析Linux服务器的性能问题的文章就讲到这里了,如果你想了解更多关于老牌运维教你如何快速分析Linux服务器的性能问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
Linux 管道可以缓冲多少数据?这是可配置的吗? 如果管道的两端在同一个进程中,但线程不同,这会有什么不同吗? 请注意:这个“同一个进程,两个线程”的问题是理论上的边栏,真正的问题是关于缓冲的。 最
我找到了here [最后一页] 一种有趣的通过 Linux 启动 Linux 的方法。不幸的是,它只是被提及,我在网上找不到任何有用的链接。那么有人听说过一种避免引导加载程序而使用 Linux 的方法
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我试图了解 ld-linux.so 如何在 Linux 上解析对版本化符号的引用。我有以下文件: 测试.c: void f(); int main() { f(); } a.c 和 b.c:
与 RetroPie 的工作原理类似,我可以使用 Linux 应用程序作为我的桌面环境吗?我实际上并不需要像实际桌面和安装应用程序这样的东西。我只需要一种干净简单的方法来在 RaspberryPi 上
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
有什么方法可以覆盖现有的源代码,我应该用 PyQt、PyGTK、Java 等从头开始构建吗? 最佳答案 如果您指的是软件本身而不是它所连接的存储库,那么自定义应用程序的方法就是 fork 项目。据我所
我的情况是:我在一个磁盘上安装了两个 linux。我将第一个安装在/dev/sda1 中,然后在/dev/sda2 中安装第二个然后我运行第一个系统,我写了一个脚本来在第一个系统运行时更新它。
我在 i2c-0 总线上使用地址为 0x3f 的系统监视器设备。该设备在设备树中配置有 pmbus 驱动程序。 问题是,加载 linux 内核时,这个“Sysmon”设备没有供电。因此,当我在总线 0
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正试图在 linux 模块中分配一大块内存,而 kalloc 做不到。 我知道唯一的方法是使用 alloc_bootmem(unsigned long size) 但我只能从 linux 内核而不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有 .sh 文件来运行应用程序。在该文件中,我想动态设置服务器名称,而不是每次都配置。 我尝试了以下方法,它在 CentOS 中运行良好。 nohup /voip/java/jdk1.8.0_71/
我是在 Linux 上开发嵌入式 C++ 程序的新手。我有我的 Debian 操作系统,我在其中开发和编译了我的 C++ 项目(一个简单的控制台进程)。 我想将我的应用程序放到另一个 Debian 操
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我使用4.19.78版本的稳定内核,我想找到带有企鹅二进制数据的C数组。系统启动时显示。我需要在哪里搜索该内容? 我在 include/linux/linux_logo.h 文件中只找到了一些 Log
我知道可以使用 gdb 的服务器模式远程调试代码,我知道可以调试针对另一种架构交叉编译的代码,但是是否可以更进一步,从远程调试 Linux 应用程序OS X 使用 gdbserver? 最佳答案 当然
是否有任何可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的是在另一台机器上重建它,但假设我们唯一能得到的是一个二进制文件,那么这可能与否? (我知道这可能并不容易,但我只是
我是一名优秀的程序员,十分优秀!