一:硬盘基础知识:
1.1:硬盘IOPS理论:
IOPS (Input/Output Per Second) 是衡量磁盘性能的重要指标,IOPS指的是每秒磁盘可以处理的请求数据和返回数据的次数,一次请求和返回算是一个IOPS,起个名词就叫做”每秒的输入输出总数“,而IOPS又分为顺序IO和随机IO,顺序IO会大幅高于随机IO,磁盘又分为机械磁盘和固态磁盘,机械磁盘内部是使用的高速旋转的盘片保存数据,外加一个可以来回伸缩的磁头向判断写入和读取数据,而固态磁盘是由芯片直接保存数据,因此固态盘在IOPS处理上会大幅高于机械磁盘,机械磁盘的IOPS之所以底是由于时间大多都浪费在了磁头在盘片来来回回转动以查找数据的时间上了,尤其是随机IO的情况下,更是如此,一般来说,随机IO大多出现在很多小文件的服务器、数据库等服务器,顺序IO大多是保存了很多视频的服务器等!
1.2:机械磁盘IOPS详解:
机械磁盘的历史比较悠久,早在1956年9月13日,IBM公司就发明了世界上首块磁盘,只不过体积有些大,容量只有5M,后来历经技术的升级和发展,才到我们现在使用的几百G甚至几T为单位的磁盘,机械盘的原理是通过磁头的不断来回摆动从而获取保存在磁盘上的数据,机械磁盘的接口也历经了IDE/SATA1/SATA2/SATA3/SAS等,磁盘的转速也有没分钟5400/7200/10000/15000转,影响磁盘的因素是磁盘处理请求的时间,即磁盘完成一个I/O请求所花费的是时间,一个I/O所花费的时间包括寻道时间、旋转延迟和传输时间三部分构成。
1.2.1:寻道时间:是指磁头移动到正确的磁道上锁花费的时间,寻道时间越短则I/O处理就越快,目前磁盘的寻道时间一般在3-15毫秒左右。
1.2.2:旋转延迟:是指磁盘片训传到数据所在的扇区到磁头下面所花费的时间,训传延迟取决于磁盘的转速,通常使用磁盘旋转一周所需要时间的1/2之一表示,比如7200转的磁盘平均训传延迟大约为60*1000/7200/2=4.17毫秒,公式的意思为 (每分钟60秒*1000毫秒每秒/7200转每秒/2),如果是15000转的则为60*1000/15000/2=2毫秒。
1.2.3:数据传输时间:只读取到数据后传输数据的时间,主要取决于传输速率,这个值等于数据大小除以传输速率,目前的SATA3接口每秒的传输速度可以达到600MB,因此可以忽略不计。
1.2.4:常见的机械磁盘平均寻道时间值:
7200转/分的磁盘平均物理寻道时间:9毫秒
10000转/分的磁盘平均物理寻道时间:6毫秒
15000转/分的磁盘平均物理寻道时间:4毫秒
1.2.5:常见磁盘的平均延迟时间:
7200转的机械盘平均延迟:60*1000/7200/2 = 4.17ms
10000转的机械盘平均延迟:60*1000/10000/2 = 3ms
15000转的机械盘平均延迟:60*1000/15000/2 = 2ms
1.2.6:每秒最大IOPS的计算方法:
7200转的磁盘IOPS计算方式:1000毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时间)=1000/13.13=75.9 IOPS
10000转的磁盘的IOPS计算方式:1000毫秒/(6毫秒的寻道时间+3毫秒的平均旋转延迟时间)=1000/9=111 IOPS
15000转的磁盘的IOPS计算方式:15000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时间)=1000/6=166.6 IOPS
1.2:硬盘监控工具之iostat:
1.2.1:iostat之命令使用介绍:
iostat命令用于监视系统输入输出设备和CPU的使用情况,汇报磁盘的使用情况,同时还能汇报CPU的使用请求,iostat有一个弱点,它不能对某一个进程进行深入分析,只能对系统的整体情况进行分析:
1.2.2:参数选项:
-c:只显示CPU的使用情况
-d:只显示磁盘使用状态
-k:显示状态以k为单位每秒,而不使用块每秒
-m:显示状态以MB为单位每秒
-p:显示块设备和所有被使用的其他分区的状态
-V:显示版本号号
-x:显示扩展状态
1.2.3:iostat之命令使用方法:
iostat 间隔时间 总统计次数 参数
例如:
1.2.4:iostat -d -k 2 3 #表示显示磁盘的使用状态,-k表示以K为单位显示,2表示每两秒刷新一次,最后的3表示一共统计三次,结果如下:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnscd0 0.00 0.00 0.00 0 0sda 88.84 0.00 44178.54 0 102936dm-0 144.64 0.00 71654.94 0 166956dm-1 0.00 0.00 0.00 0 0
输出的含义为:
Device:磁盘的名称,可以显示出每个磁盘的状态:
tps:该磁盘每秒的传输次数总数,一次传输的意思相当于是一次I/O请求,多个逻辑请求可能会被合并为一次I/O请求,因此一次传输请求的大小是未知的。
KB_read/s:表示每秒从设备读取的数据量
KB_write/s:表示每秒向设备写入的数据量
KB_read:读取的总数量
KB_write:写入的总数量,以上单位都是千字节(Kilobytes),即kb
1.2.5:iostat -d /dev/sda -k 1 3 #表示只监控sda的状况,以kb为单位显示,每次间隔1秒刷新一次,总计统计3次:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 9.14 118.59 869.51 112440 824405
#每行的含义参考1.2.4
1.2.6:iostat -x #用于显示和io相关的扩展数据。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 0.00 0.02 5.21 2.50 99.83 732.02 215.68 1.12 144.87 8.48 428.97 3.06 2.36scd0 0.00 0.00 0.01 0.00 0.05 0.00 6.75 0.00 0.75 0.75 0.00 0.75 0.00dm-0 0.00 0.00 3.83 1.61 73.68 730.20 295.17 1.12 205.68 10.39 669.77 4.24 2.31dm-1 0.00 0.00 0.11 0.00 0.95 0.00 16.69 0.00 0.67 0.67 0.00 0.65 0.01
#输出的含义为:
Device:设备的名称。
rrqm/s:表示磁盘每秒的读取请求有多少被merge(合并)了,(当系统调用需要读取数据的时候,VFS将请求发送到各个FS,如果FS发现不同的请求读取的是相同的Block的数据,那么FS会将这个请求合并,Merge)。
wrqm/s:表示磁盘每秒的写入请求有多少倍merge(合并)了,(当系统调用需要写入数据的时候,VFS将请求发送到各个FS,如果FS发现不同的请求写入的是相同的Block的数据,那么FS会将这个请求合并,Merge) 。
r/s:每秒实际(合并以后)需要读取的数量。
w/s:每秒实际(合并以后)需要写入的数量。
rsec/s (rkB/s, rMB/s):每秒从设备读取的扇区数目。
wsec/s (wkB/s, wMB/s) 每秒写入设备的扇区数目。
avgrq-sz:读取磁盘的平均扇区大小。
avgqu-sz:平均请求队列的长度。
await:每一个IO请求的处理的平均时间(单位是毫秒,读IO和写IO向加以后平均),这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了,这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于后面的统计值svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
r_await:统计单位时间内平均每毫秒的请求I/O处理时间,包括I/O的队列等待时间和服务时间。
w_await: 统计指定时间内平均每毫秒的写I/O处理时间,包括I/O的队列等待时间和服务时间。
svctm: 表示平均每次设备处理I/O操作的服务时间(以毫秒为单位),如果svctm的值与await的值很接近,表示没有I/O等待,说明磁盘性能很好,如果await的值远高于svctm的值,则表示I/O的队列太长,系统的运行程序会变慢。
%util: 在单位时间(默认每秒)内所有处理IO时间除以总共统计时间,例如统计时间间隔为1秒,该设备有0.8秒在处理IO,只有0.2秒空闲。那么该设备的%util 0.8/1 = 80%,所以参数暗示了设备的繁忙程度,一般来说如果是100%就表示磁盘已经接近满负荷运行了(如果是多次磁盘的情况下,因为磁盘的并发能力, 所以未必就到了瓶颈,但是可以作为参考条件)。
#定位IO过高的思路:
一般先使用iostat -x命令获取到%util即单位时间内IO处理值是否过高,假如统计时间为2秒一次则有1秒在处理IO,零一秒空闲,则说明该磁盘的%util值为1/2=50%,这个值一般和svctm(磁盘每秒处理IO操作的平均时间)比较接近,如果看到队列await的值很大则表示IO队列很长,那么%util势必也会很大。
1.3:硬盘监控工具之iotop:
1.3.1:iotop之命令介绍:
是一个用来监视磁盘I/O使用状况的系统命令,界面类似于top,linux下的IO统计工具如iostat、nmon等只能统计到所有设备的读写状况,但是无法统计具体哪个进程使用的IO值,但是使用iotop就可以很直观的看到,iotop 命令的官网是http://guichaz.free.fr/iotop/,提供rpm包和源码下载,目前最新的版本是0.6
1.3.2:iotop之参数选项:
-h:帮助信息
-o:只显示有IO操作的进程,每秒自动刷新一次显示有IO的进程,没有IO的进程将不显示
-b:非交互模式,用于记录日志
-n x:用于设置显示x次后退出
-d x:设置x次显示时的间隔时间
-u user:显示指定用户的进程信息
-p:只显示进程,默认为显示所有的线程
-a:显示从iotop命令启动后每个线程完成了的IO总数
-k:以千字节为单位显示,即kb
-t:在每一行前面加上当前的系统时间
注:在交互界面,可以通过按键改变统计 显示顺序,如:
r:对当前显示按照反向排序
o:切换到选项-o
p:切换到选项-p
a:奇幻到旋转-a
q:退出
iL改变线程的优先级
-q, –quiet 禁止头几行,非交互模式。有三种指定方式。 -q 只在第一次监测时显示列名 -qq 永远不显示列名。 -qqq 永远不显示I/O汇总。
1.4系统监控之网络监控 iftop、ifstat、iptraf、ntop、mtr
1.4.1:网络监控命令iftop:显示与网络的网络通信详情
#使用方法:iftop -n -N -B -b -i eth0
1.4.2:ifstat:
默认系统没有安装,安装方法:rpm -ivh http://pkgs.repoforge.org/ifstat/ifstat-1.1-1.2.el7.rf.x86_64.rpm
使用方法:/usr/bin/ifstat -tT
1.4.3:iptraf:IP流量监控,监控通过在您的网络上的IP流量的信息。包括TCP标志信息,数据包和字节计数,ICMP的细节,OSPF数据包类型,全面和详细的接口统计数据显示IP,TCP,UDP,ICMP,非IP和其他IP数据包的数量,IP校验和错误,接口状态,数据包大小。
#非系统自带组件,目前最新版本是3.0.0,是2005年更新的,经本人测试目前不支持安装在RHEL 7系列,以下是cenoos 6的安装教程:
官方下载地址:http://www.iptraf.seul.org/download.html
安装过程:
#wget ftp://iptraf.seul.org/pub/iptraf/iptraf-3.0.0.tar.gz
#tar xvf iptraf-3.0.0.tar.gz
#cd iptraf-3.0.0
#./Setup #通过脚本安装,需要gcc环境,安装完之后会出现在/usr/bin/iptraf
#iptraf
1.4.3.1:首次打开界面:,按任意键继续:
1.4.3.2选择菜单,一般选择第一项即IP流量监视
1.4.3.3:选择第一项即网络接口的详细统计,然后选择要统计流量的网卡名称:
1.4.3.4:详细界面:
#每一组两个主机,显示端口到端口的连接,后面是改端口传输的数据包数量、数据包大小等信息
#网络监控工具功能大同小异,只要能熟练使用一种即可,推荐iptraf,功能强大,可自定义强