磁盘性能优化

一、 查看硬盘读取速度

  命令:hdparm -t /dev/sda5

  打印:Timing buffered disk reads:  254 MB in  3.01 seconds =  84.34 MB/sec

  说明:能够指定具体的哪块硬盘进行查询的哦!

  二、 查找最耗iowait的进程

  操作步骤:

  1.  /etc/init.d/syslog stop

  2.  echo 1 > /proc/sys/vm/block_dump

  3.  dmesg | egrep "READ|WRITE|dirtied" | egrep -o ‘([a-zA-Z]*)‘ | sort | uniq -c | sort -rn | head

  不要忘记在抓完之后关掉block_dump和启动syslog

  4.  echo 0 > /proc/sys/vm/block_dump

  5.  /etc/init.d/syslog start

  三、 iostat命令

  格式:iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval

  描述:iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

  参数:

  -c为汇报CPU的使用情况;

  -d为汇报磁盘的使用情况;

  -k表示每秒按kilobytes字节显示数据;

  -p显示所有存储设备分区信息。

  -t为打印汇报的时间;

  -v表示打印出版本信息和用法;

  -x device指定要统计的设备名称,默认为所有的设备;

  interval指每次统计间隔的时间;

  count指按照这个时间间隔统计的次数。

  输出信息:

  rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s

  wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s

  r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s

  w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s

  rsec/s: 每秒读扇区数。即 delta(rsect)/s

  wsec/s: 每秒写扇区数。即 delta(wsect)/s

  rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

  wkB/s: 每秒写K字节数。是 wsect/s 的一半。

  avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)

  avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。

  await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)

  svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)

  %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是  非空的。

  CPU:表示机器内所有的CPU;

  %user 表示CPU的利用率;

  %nice 表示CPU在用户层优先级的百分比,0表示正常;

  %system 表示当系统运行时,在用户应用层上所占用的CPU百分比;

  %iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;

  %idle 表示空闲CPU百分比,值越大系统负载越低

  示例:

  avg-cpu:  %user   %nice    %sys  %iowait   %idle

  0.88       0.00    0.29    0.60   98.24

  我发现IO处理这块所占用的CPU的百分比要比较高啊。因为我正在做的就是记日志处理与MV更改名称所以CPU比较高!

  示例:

  1、    iostat -d -k 1 10

  Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

  sda             121.00       356.00       888.00        356        888

  sda1         
;    0.00         0.00         0.00          0          0

  sda2              0.00         0.00         0.00          0          0

  sda3              0.00         0.00         0.00          0          0

  sda4              0.00         0.00         0.00          0          0

  sda5            243.00       356.00       888.00        356        888

  说明:

  -d    显示设备(磁盘)使用状态

  -k    某些使用block为单位的列强制使用kilobytes为单位

  Tps: 该设备每秒的传输次数(一次传输即一次IO请求)

  kB_read/s 每秒从设备读取的数据量

  kB_wrtn/s 每秒向设备写入的数据量

  kB_read      读取的总数据量

  kB_wrtn   写入的总数据量

  2、    iostat  -d -x -k 1 10

  Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  sv

  ctm  %util

  sda          2.00   0.00 15.00  0.00  600.00    0.00   300.00     0.00    40.00     0.25   15.53   7

  .20  10.80

  说明:rrqm/s 每秒这个设备相关的读取请求有多少被merge了(当系统调用需要读取数据的时候VFS会将请求发到各个FS,

  如果FS发现不同的读取请求读取的相同BLOCK的数据FS会将请求作一次合并);wrqm/s 每秒这个设备相关的写入请求有多少被merge了。

  Rsec/s 每秒读取的扇区数;wsec/s每秒写入的扇区数 r/s

  await:每一个IO请求的处理的平均时间(单位为微秒)说明:一般系统的IO响应时间应该低于5ms如果大于10ms就比较大了!

  %util:在统计时间内所有处理IO时间/总共统计时间    这个参数说明了设备的繁忙程序。如果此参数到了100%说明此设备接近満负荷运行

  (如果是多磁盘即使到了100%因为有并发也未必达到了瓶颈)

  3、iostat -c 1 10

  输出:

  avg-cpu:  %user   %nice    %sys %iowait   %idle

  65.30    0.00    1.61    2.23   30.86

  能够用来获取CPU的性能数据!

  实例分析:

  1、iostat -d -k 1|grep sda5

  输出:

  sda5              7.48        17.44        22.41  527084575  677241228

  sda5             20.79       380.20         0.00        384          0

  sda5            132.65       367.35       428.57        360        420

  sda5             39.60       582.18         0.00        588          0

  说明:其中的sda5表示的是物理逻辑分区而不是物理硬盘。如果有多块硬盘的话就表示为sda sdb 这样的多个物理硬盘

  2、iostat -d -x -k 1

  输出:

  Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

  sda          0.05   6.46  1.85  2.43   35.34   71.15    17.67    35.57    24.87     0.10   22.25   6.20   2.66

  磁盘平均响应时间在22.25 磁盘的使用率在2.66%

  说明磁盘响应有点慢。

  四、vmstat

  名称:报告虚拟内存的统计信息

  格式:vmstat [-n] [延时[次数]]

  描述:这个命令是非常有用的务必要熟练掌握!

  选项:

  -n    开头令第一次的信息只显示一次而不是周期地产生

  -S    单位大小

  -a    显示活跃和不活跃的内存信息

  -s    显示相关虚拟内存统计表

  输出信息简介:

  Proc

  r:运行和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

  b:处于不可中断状态的进程数。常见情况由IO引起

  Memory

  swpd:切换到交换内存上的内存(默认以KB为单位)

  说明:如果它不为0或者比较大比如超过100M,但是si so 的值长期为0.这种情况不用担心系统性能

  free:空闲的物理内存

  buff:作为buffer cache的内存,对块设备的读写作缓冲

  cache:作page cache的内存,文件系统级的cache

  如果cache值大的时候说明cache住的文件数多,如果频繁访问到的文件都能被cache住那磁盘的读IO bi会非常小。

  Swap

  si: 交换内存使用,由磁盘调入内存

  so: 交换内存使用,由内存调入磁盘

  说明:如果系统的内存够用的时候这两个值都是0,如果这两个值长期大于0说明系统性能受到影响。

  如果系统的内存free 很少,但是si so也很少,那系统性能不会受到影响的!

  IO

  bi:从块设备读入的数据总量(读磁盘)(KB/s)

  bo:写入到块设备的数据总量(写磁盘)(KB/s)

  System

  in:    每秒产生的中断次数

  cs:    每秒产生的上下文切换次数

  说明:这两个值越大,会看到由内核消耗的CPU时间会越多!

  CPU

  us:    用户进程消耗的CPU时间百分比

  us的值比较高时,说明用户进程的消耗的CPU时间多,如果长期超过50%的使用那就要考虑优化程序算法或加速。

  sy    内核进程消耗的CPU时间百分比

  如果sy的值高时说明系统内核消耗的CPU资源多。要检查原因

  wa    IO等待消耗的CPU时间百分比

  wa值如果高时说明IO等待比较严重。可能是由于磁盘在做大量的随机访问造成,也可能是磁盘的带宽出现瓶颈

  id:    CPU处于空闲状态时间百分比

  情景分析:

  我们需要关心的有哪些方面?

  Procs r: 运行的进程比较多,系统很繁忙

  Io bo:   磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常

  Cpu us:     持续大于50,如果是高峰期可以接受

  Cpu wa:     稍微有些高

  Cpu id:  持续小于50,高峰期可以接受

  五、TOP命令

  命令:top

  输出如下:

  top - 12:47:48 up 349 days, 21:50,  2 users,  load average: 3.81, 4.23, 4.34

  Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie

  Cpu(s): 38.7% us,  0.6% sy,  0.0% ni, 58.9% id,  1.7% wa,  0.0% hi,  0.0% si

  Mem:   4147272k total,  4117996k used,    29276k free,   459344k buffers

  Swap:  1052248k total,      192k used,  1052056k free,  3174936k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

  2274 root      15   0 24976  18m 2436 S   62  0.4 151:00.05 python

  第一行:top - 12:47:48 up 349 days, 21:50,  2 users,  load average: 3.81, 4.23, 4.34

  12:47:48        表示当前系统时间

  349 days, 21:50        表示系统启动后到现在的运作时间

  2 users            登录到用户的终端数。同一用户同一时间开多个终端认为是多个用户

  load average: 3.81, 4.23, 4.34    当前系统的平均负载,后面三个值分别为1分钟前、5分钟前、15分钟前进程的平均数

  一般可以认为这个数值超过CPU数目时CPU将比较吃力了!

  说明:查看当前服务器CPU数量的命令:cat /proc/cpuinfo |grep processor|wc -l    我的输出:8

  第二行:Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie

  Tasks: 112 total    表示当前系统进程总数

  1 running        当前运行中的进程数

  111 sleeping        为当前等待状态中的进程数

  0 stopped        为被停止的系统进程数

  0 zombie        为僵死的进程数

  第三行:Cpu(s): 38.7% us,  0.6% sy,  0.0% ni, 58.9% id,  1.7% wa,  0.0% hi,  0.0% si

  显示CPU的利用率。如果有多个CPU按1就可以每行显示一个CPU的信息。

  第四行:Mem:   4147272k total,  4117996k used,    29276k free,   459344k buffers

  显示可用内存和已利用内存

  第五行:Swap:  1052248k total,      19

2k used,  1052056k free,  3174936k cached

  注意:交换分区被频繁使用的话可以认为是物理内存不足而造成的。

  第六行开始列举各个进程的相关信息

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

  PID        进程ID

  USER        谁运行这个进程

  PRI        进程的优先级

  NI        nice值:这个值越高,任务的优先级越低

  SIZE        这个进程使用的内存(代码+数据+堆栈)

  RSS        这个进程占用的物理内存

  SHARE        这个进程使用的共享内存

  STAT        进程的状态信息。

  R    正在运行

  S    正在休息

  Z    迟滞

  T    停止

  W    已换出的进程

  N    正nice的值

  %CPU        这个进程占用的CPU百分比

  %MEM        占用的内存百分比

  TIME        这个进程使用的总CPU时间

  CPU        如果这是一个多处理器系统,这一列就表示其上运行进程的CPU的ID

  CPU Utilization,一个很直观的概念,在任意时间内,CPU有7个状态:

  1.idle,表示CPU闲置并等待工作分配.

  2.user,表示CPU在运行用户的进程

  3.system,表示CPU在执行kernel工作

  4.nice, 表示CPU花费在被nice改变过优先级的process上的时间

  (注意:被nice命令改变优先级的process仅指那些nice值为负的 process.花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,

  因此整个时间加起来可能会超过百分之百)

  5.iowait,表示CPU等待IO操作完成的时间

  6.irq,表示CPU开销在响应硬中断上的时间

  7.softirq,表示CPU开销在响应软中断上的时间.

  我们一般用vmstat看到的都是四个状态:sy,us,id,wa,通过他和load avg结合,基本可以知道cpu的状态

  us -> User         表示CPU在运行用户的进程

  sy -> system       表示CPU在执行kernel工作

  ni -> nice         表示CPU花费在被nice改变过优先级的process上的时间

  id -> idle         表示CPU闲置并等待工作分配.

  wa -> iowait       表示CPU等待IO操作完成的时间 %wa高,说明磁盘忙。譬如磁盘读写次数非常高。

  hi -> H/w interrupt requests  硬件中断

  si -> S/w interrupt requests  软件中断 %si高,是否说明软中断忙.进程之间频繁切换导致!

时间: 2024-10-13 02:48:39

磁盘性能优化的相关文章

Linux性能优化之磁盘优化(三)

前言 关于本章内容,设计的东西比较多.这里会有关于文件系统.磁盘.CPU等方面的知识,以及涉及到关于这方面的性能排查等. 术语 文件系统通过缓存和缓冲以及异步I/O等手段来缓和磁盘的延时对应用程序的影响.为了更详细的了解文件系统,以下就简单介绍一些相关术语: 文件系统:一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问.另外,一些表示设备.套接字和管道的特殊文件类型,以及包含文件访问时间戳的元数据. 文件系统缓存:主存(通常是DRAM) 的一块区域,用来缓存文

Spark性能优化指南——高级篇

Spark性能优化指南--高级篇 [TOC] 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数tas

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

Oracle SQL性能优化

转载自:http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection ta

iOS性能优化:Instruments使用实战(转)

采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instruments使用技巧 关于Instruments官方有一个很有用的用户使用Guide,当然如果不习惯官方英文可以在这里找到中文本翻译版本PDF参阅.Instruments 确实是一个很强大的工具,用它来收集关于一个或多个系统进程的性能和行为的数据极为方便,并能及时跟踪随着时间产生的数据.还可以广泛收集不同类型的数据.关于Instrument工具基本使用不在赘述.如

Linux性能优化之CPU优化(一)

前言 何为性能优化?个人认为,性能优化是为了提高应用程序或系统能力为目的.那么如何才能实现对应用程序的性能调优呢?这里很设计到很多的内容,包括Linux内核.CPU架构以及Linux内核对资源的分配以及管理,了解进程的创建过程等.这方面由于篇幅较多,所以我的文章就不过多介绍.接下来的几篇文章中,都是讲解如何发现应用程序故障根源为目标讲解,这也是每一个系统工程师应该具备的能力.废话不多说,我直接进入主题. 常用术语 延时:延时是描述操作之后用来等待返回结果的时间.在某些情况下,它可以指的是整个操作

mysql配置以及性能优化(转)

MySQL配置文件my.cnf中文详解,附mysql性能优化方法分享 ================================================================================================= Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果

mysql 性能优化方案 (转)

网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一

iOS性能优化:Instruments使用实战

iOS性能优化:Instruments使用实战 最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instruments使用技巧 关于Instruments官方有一个很有用的用户使用Guide,当然如果不习惯官方英文可以在这里找到中文本翻译版本PDF参阅.Instruments 确实是一个很强大的工具,用它来收集关于一个或多个系统进程的性能和行为的数据极为方便,并能及时跟踪随着时间产生的数据.还可以广泛收集不同类型的数