SE LINUX下磁盘IO性能监测分析

  这两天发现一台测试用的服务器经常负载很高,但cpu和内存消耗却很少,很是奇怪,经过诊断发现是由于大容量的测试数据导致高并发下的磁盘IO消耗比较大,由于缓存是小文件并且数量比较大,所以并发比较高的情况下Io消耗非常大。 那怎样才能快速的定位到并发高是由于磁盘io开销大呢?

一、用 top 命令中的 信息进行观察

204027418.jpg

 

 

 


划红线的参数解释如下:
 

  1. Tasks: 437 total 进程总数
     
  2. 4 running 正在运行的进程数
     
  3. 430 sleeping 睡眠的进程数
     
  4. 3 stopped 停止的进程数
     
  5. 0 zombie 僵尸进程数
     
  6. Cpu(s):
     
  7. 7.1% us 用户空间占用CPU百分比
     
  8. 4.2% sy 内核空间占用CPU百分比
     
  9. 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
     
  10. 76.8% id 空闲CPU百分比
     
  11. 12% wa 等待输入输出的CPU时间百分比
     
  12. 12% wa 的百分比可以大致的体现出当前等待输入输出的磁盘io请求过于频繁。
复制代码


为进一步分析,我们跟踪关键进程定位程序
#strace  -p  28644  (如图示占用CPU较高)

 

205645745.jpg


 

 


说明在多线程条件下,如果并发操作过于频繁,semtimedop会调用失败,Input/output  出错。
进一步定位到程序 #ps  -ef | grep  28644

 

210320529.jpg


 

 


可以知道是ora_lgwr_nms程序导致的读写开销比较大。


二、利用IOSTAT命令观察
磁盘的IO性能是衡量计算机总体性能的一个重要指标。Linux提供了iostat命令来获却磁盘输入/输出(即IO)统计信息。
#iostat  -x   1  统计完整的结果,每秒一次。

 

211124839.jpg
 

 

 


iowait的值比较大,说明读写频繁。
#iostat  -p   1统计各个分区的读写情况,每秒1次。
 

083525343.jpg


 

 


使用 #mount  命令,来对应查找就知道sda5对应的/opt分区和sdb8对应的/data分区读写频繁。
 

083648227.jpg


 

 


再定位到DATA分区,查看数据库归档情况,发现一分钟内归档产生四个文档并且每个文件有48M这么大,写入应该非常频繁,导致磁盘IO开销比较大。
 

083838990.jpg


 

 


  而OPT分区由于有FTP传输到导致磁盘开销比较大。
分析定位完毕,针对相关问题调整FTP和数据库归档,然后再看一下都正常了。

 

084733678.jpg



 

 


 

   084802567.jpg


 

 


总结:TOP、IOSTAT都是比较常见的命令,通过基本命令的灵活应用来分析和定位问题是比较方便的,特别是基本命令的参数选择和使用更是值得我们大家研究的。

补充:磁盘IOPS知识

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标。另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。
传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。

旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。

数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。
因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,
 

  1. IOPS = 1000 / (3 + 60000/7200/2) = 140
     
  2. IOPS = 1000 / (3 + 60000/10000/2) = 167
     
  3. IOPS = 1000 / (3 + 60000/15000/2) = 200
复制代码


决定IOPS的主要取决与阵列的算法,cache命中率,以及磁盘个数。阵列的算法因为不同的阵列不同而不同.在raid5与raid10上,读iops没有差别,但是相同的业务,写iops最终落在每块磁盘上是有差别的,如果达到了每块磁盘的写的i0ps限制,性能会受到影响。对于raid5来说每一个写实际发生了4个io,而raid10只发生了2次io,所以raid10比raid5在写上要快一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章