黑基网 首页 服务器 Linux 查看内容

linux性能优化常用命令

2013-10-11 10:48| 投稿: Linux|

摘要:   作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性 和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出...
  作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性 和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题, 本章从系统入手,重点讲述由于系统软、硬件配置不当可能造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程。  1 cpu性能评估  Cpu是影响Linux性能的主要因素之一,下面先介绍几个查看CPU性能的命令。  1.1 vmstat命令  该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况。  下面是vmstat命令在某个系统的输出结果:  [[email protected] ~]# vmstat 2 3  procs -----------memory----------  ---swap--  -----io---- --system--  -----cpu------  r  b   swpd   free   buff  cache   si   so    bi    bo    in    cs    us sy  id  wa st  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  100 0  0s+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。     0.00      0.00     99.92PU的使用情况:sp;    0      1.00      0.00      0.33      0.33      0.00     98.349:44,  2 users,  load average: 0.12, 0.08, 0.08  0       8189149312     163840 8586985472-/+ buffers/cache:     646228    7660316统内存和交换空间的使用率。请看下面的一个输出:在内存方面出现的瓶颈已经很少,因为内存价格很低,充足的内存已经完全能满足应用程序和系统本身的需要,如果系统在内存方面出现瓶颈,很大的可能是应用程序本身的问题造成的。; wr_sec/s  avgrq-sz  avgqu-sz  await   svctm   %utilnux中I/O请求系统与现实生活中超市购物排队系统有很多类似的地方,通过对超市购物排队系统的理解,可以很快掌握linux中I/O运行机制。比如:;  Blk_read   Blk_wrtn;     12/01/2008      _i686_  (8 CPU)  wrqm/s  r/s  w/s   rsec/s   wsec/s avgrq-sz avgqu-sz     await  svctm  %utilsda  239588 29282  6481862 1044442 4538680   32387690 295410908 186025581  0   6179   这个输出显示了磁盘的reads、writes和IO的使用状况。  3.4 本节小结  上面主要讲解了对磁盘I/O的性能评估,其实衡量磁盘I/O好坏是多方面的,有应用程序本身的,也有硬件设计上的,还有系统自身配置的问题等,要解决I/O的瓶颈,关键是要提高I/O子系统的执行效率。例如,首要要从应用程序上对磁盘读写进行优化,能够放到内存执行的操作,尽量不要放到磁盘,同时对磁盘存储方式进行合理规划,选择适合自己的RAID存取方式,最后,在系统级别上,可以选择适合自身应用的文件系统,必要时使用裸设备提高读写性能。  4 网络性能评估  网络性能的好坏直接影响应用程序对外提供服务的稳定性和可靠性,监控网络性能,可以从以下几个方面进行管理和优化。  4.1 通过ping命令检测网络的连通性  如果发现网络反应 缓慢,或者连接中断,可以通过ping来测试网络的连通情况,请看下面的一个输出:  [[email protected] ~]# ping 10.10.1.254  PING 10.10.1.254 (10.10.1.254) 56(84) bytes of data.  64 bytes from 10.10.1.254: icmp_seq=0 ttl=64 time=0.235 ms  64 bytes from 10.10.1.254: icmp_seq=1 ttl=64 time=0.164 ms  64 bytes from 10.10.1.254: icmp_seq=2 ttl=64 time=0.210 ms  64 bytes from 10.10.1.254: icmp_seq=3 ttl=64 time=0.178 ms  64 bytes from 10.10.1.254: icmp_seq=4 ttl=64 time=0.525 ms  64 bytes from 10.10.1.254: icmp_seq=5 ttl=64 time=0.571 ms  64 bytes from 10.10.1.254: icmp_seq=6 ttl=64 time=0.220 ms  --- 10.10.1.254 ping statistics ---   7 packets transmitted, 7 received, 0% packet loss, time 6000ms  rtt min/avg/max/mdev = 0.164/0.300/0.571/0.159 ms, pipe 2  在这个输出中,time值显示了两台主机之间的网络延时情况,如果此值很大,则表示网络的延时很大,单位为毫秒。在这个输出的最后,是对上面输出信息的一个总结,packet loss表示网络的丢包率,此值越小,表示网络的质量越高。  4.2 通过netstat –i组合检测网络接口状况  netstat命令提供了网络接口的详细信息,请看下面的输出:  [[email protected] ~]# netstat -i  Kernel Interface table  Iface MTU  Met RX-OK     RX-ERR RX-DRP RX-OVR   TX-OK    TX-ERR TX-DRP TX-OVR       Flg  eth0  1500  0 1313129253  0      0       0     1320686497    0      0      0        BMRU  eth1  1500  0 494902025   0      0       0     292358810     0      0      0        BMRU  lo   16436  0 41901601    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命令的输出完全相同,请看下面的一个实例:  [[email protected] ~]#  netstat -r  Kernel IP routing table   Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface  10.10.1.0       *               255.255.255.0   U         0   0       0  eth0  192.168.200.0   *               255.255.255.0   U         0   0       0  eth1  169.254.0.0     *               255.255.0.0     U         0   0       0  eth1  default         10.10.1.254     0.0.0.0         UG        0   0       0  eth0  关于输出中每项的具体含义,已经在前面章节进行过详细介绍,这里不再多讲,这里我们重点关注的是default行对应的值,default项表示系统的默认路由,对应的网络接口为eth0.  4.4 通过sar –n组合显示系统的网络运行状态   sar提供四种不同的选项来显示网络统计信息,通过"-n"选项可以指定4个不同类型的开关:DEV、EDEV、SOCK和FULL.DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,FULL显示所有三个开关。请看下面的一个输出:  [[email protected] ~]# sar -n DEV 2 3  Linux 2.6.9-42.ELsmp (webserver)        12/01/2008      _i686_  (8 CPU)  02:22:31 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s  02:22:33 PM        lo     31.34     31.34     37.53     37.53      0.00      0.00      0.00  02:22:33 PM      eth0    199.50    279.60     17.29    344.12      0.00      0.00      0.00  02:22:33 PM      eth1      5.47      4.98      7.03      0.36      0.00      0.00      0.00 sp;   0.00      0.00      0.00      0.00      0.00      0.00      0.00p;    0.00      0.00      0.00bsp;  0.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解析信息。   Average:        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   &n  02:22:35 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s  02:22:37 PM        lo      4.52      4.52      9.25      9.25      0.00      0.00      0.00  02:22:37 PM      eth0    102.51    133.67     20.67    116.14      0.00      0.00      0.00  02:22:37 PM      eth1     27.14     67.34      2.42     89.26      0.00      0.00      0.00  02:22:37 PM      sit0      0.00      0.00      0.00      0.00 &nbs  02:22:33 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00  02:22:33 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s  02:22:35 PM        lo     67.66     67.66     74.34     74.34      0.00      0.00      0.00  02:22:35 PM      eth0    159.70    222.39     19.74    217.16      0.00      0.00      0.00  02:22:35 PM      eth1      3.48      4.48      0.44      0.51      0.00      0.00      0.00  02:22:35 PM      sit0  &nb  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.3 vmstat –d组合  通过"vmstat –d"组合也可以查看磁盘的统计数据,情况下面的一个输出:  [[email protected] ~]# vmstat -d 3 2|grep sda  disk- ------------reads------------ ------------writes----------- -----IO------  total  merged sectors    ms    total    merged   sectors      ms     cur    sec  sda  239588 29282  6481862  1044442 4538678  32387680 295410812  186025580  0   6179  disk- ------------reads------------ ------------writes----------- -----IO------  total  merged  sectors  ms    total     merged    sectors     ms     cur   sec  avg-cpu:  %user   %nice %system %iowait  %steal   %idle  2.45    0.00    0.30    0.24    0.00   97.03  Device: rrqm/s  wrqm/s  r/s  w/s  rsec/s  wsec/s avgrq-sz avgqu-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.24  avg-cpu:  %user   %nice %system %iowait  %steal   %idle  3.97    0.00    1.83    8.19    0.00   86.14  Device:rrqm/s wrqm/s   r/s  w/s   rsec/s  wsec/s avgrq-sz avgqu-sz   await  svctm  %util  sda    0.00   195.00  0.00 18.00  0.00  1704.00    94.67     0.04    2.50   0.11   0.20  avg-cpu:  %user   %nice %system %iowait  %steal   %idle  4.04    0.00    1.83    8.01    0.00   86.18  Device: rrqm/s  sda               0.00         0.00         0.00          0          0  Device:            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"组合还提供了对每个磁盘的单独统计,如果不指定磁盘,默认是对所有磁盘进行统计,请看下面的一个输出:  [[email protected] ~]#   iostat -x /dev/sda  2 3  Linux 2.6.9-42.ELsmp (webserver)    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"命令组合也可以查看系统磁盘的使用状况,请看如下输出:  [[email protected] ~]#   iostat -d 2 3  Linux 2.6.9-42.ELsmp (webserver)        12/01/2008      _i686_  (8 CPU)


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

相关分类