6.1 磁盘I/O介绍

一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区。这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定。这些被挂载的文件系统包含了应用程序要读写的文件。

当一个应用程序进行读写时,Linux内核可以在其高速缓存或者缓冲区中保存文件的副本,并且可以在不访问磁盘的情况下返回被请求的信息。但是,如果Linux内核没有在内存中保存数据副本,那它就向磁盘I/O队列添加一个请求。若Linux内核注意到多个请求都指向磁盘内相邻的区域,它会把它们合并为一个大的请求。这种合并能消除第二次请求的寻道时间,以此提高磁盘的整体性能。当请求被放入磁盘队列,而磁盘当前不忙时,它就开始为I/O请求服务。如果磁盘正忙,则请求就在队列中等待,直到该设备可用,请求将被服务。

6.2 磁盘I/O性能工具

6.2.1 vmstat

语法:

vmstat [-D] [-d] [-p partition] [interval count]

vmstat选项说明

-D

显示Linux I/O子系统的统计信息,显示的是系统启动以来的总信息

-d

按每interval一个样本的速率显示单个磁盘的统计数据,显示的是系统启动以来的总信息。

-p partition

按照每interval一个采样的速率显示给定分区性能统计数据,显示的是系统启动以来的总信息。

interval

采样之间的频率

count

所取的样本总数

vmstat默认显示的信息:

vmstat –D 显示的信息

部分统计信息说明

disks

系统中磁盘的总数

partitions

系统中分区的总数

total   reads

读请求的总数

merged   reads

为了提升性能而被合并的不同读请求的数量,这些读请求访问的是磁盘上的相邻位置。

writes

写请求的总数

inprogress   IO

当前正在处理的I/O总数

vmstat  –d部分统计信息说明

reads:total

读请求的总数

reads:merged

为了提升性能而被合并的不同读请求的数量

reads:sectors

从磁盘读取的扇区的总数

ms

磁盘读所花费的时间

vmstat –d 显示的信息:

6.2.2 iostat

与vmstat相似,但它是一个专门用于显示磁盘I/O子系统统计信息的工具。iostat提供的信息细化到每个设备和每个分区从特定磁盘读写了多少个块。此外,iostat还可以提供大量的信息来显示磁盘是如何被利用的,以及Linux花费了多长时间来等待将请求提交到磁盘。

iostat命令行选项

-d

只显示磁盘I/O的统计信息,而不是默认信息。

-k

按KB显示统计数据,而不是按块显示

-x

显示拓展性能I/O统计信息

device

若指定设备,则iostat只显示该设备的信息

iostat设备统计信息

tps

每秒传输次数,该项为每秒对设备/分区读写请求的次数

Blk_read/s

每秒读取磁盘块的速率

Blk_wrtn/s

每秒写入磁盘块的速率

Blk_read

在时间间隔内读取块的总数量

Blk_wrtn

在时间间隔内写入块的总数量

iostat –d 显示:

6.2.3 sar

6.2.4 lsof

lsof提供了一种方法来确定哪些进程打开了一个特定的文件,除了跟踪单个文件的用户外,lsof还可以显示使用了特定目录下的进程。

语法

lsof [-r   delay] [+D directory] [+d directory] [file]

lsof命令选项说明

-r delay

使得lsof每间隔delay秒输出一次统计数据

+D directory

使得lsof递归搜索给定目录下的所有文件,并报告哪些进程正在使用

+d   directory

使得lsof报告哪些进程正在使用给定目录下的文件

lsof显示访问了/usr/bin下所有文件的进程

Linux性能优化 第六章 性能工具:磁盘I/O的更多相关文章

  1. Linux性能优化 第五章 性能工具:特定进程内存

    5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...

  2. Linux性能优化 第七章 性能工具:网络

    7.1 网络I/O介绍 Linux和其他主流操作系统中的网络流量被抽象为一系列的硬件和软件层次. 链路层,也就是最低的一层,包含网络硬件,如以太网设备.在传送网络流量时,这一层并不区分流量类型,而仅仅 ...

  3. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

  4. Linux性能优化 第四章 性能工具:特定进程CPU

    4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...

  5. EntityFramework之原始查询及性能优化(六)

    前言 在EF中我们可以通过Linq来操作实体类,但是有些时候我们必须通过原始sql语句或者存储过程来进行查询数据库,所以我们可以通过EF Code First来实现,但是SQL语句和存储过程无法进行映 ...

  6. React性能优化,六个小技巧教你减少组件无效渲染

    壹 ❀ 引 在过去的一段时间,我一直围绕项目中体验不好或者无效渲染较为严重的组件做性能优化,多少积累了一些经验所以想着整理成一片文章,下图就是优化后的一个组件,可以对比优化前一次切换与优化后多次切换的 ...

  7. 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  8. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

    十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...

  9. 性能优化中CPU、内存、磁盘IO、网络性能的依赖(转)

    关于系统性能优化,推荐一篇不错的博客! 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试 ...

随机推荐

  1. 20165308 《Java程序设计》第9周学习总结

    20165308 <Java程序设计>第9周学习总结 教材学习内容总结 13章知识总结 获取地址 1.获取Internet上主机的地址 可以使用InetAddress类的静态方法getBy ...

  2. 艰苦的编译boost python (失败)

    1.下载 boost_1_67_0 2.在目录下执行 bootstrap 3.将python36添加到path环境变量 4.执行 b2 --with-python,将会声场如下dll 2018/04/ ...

  3. [转]web.xml中<url-pattern>详解

    标签<url-pattern><url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet> <servlet-n ...

  4. spring-IOC容器(二)

    一.bean配置里面使用外部属性文件: <bean>中添加context Schema定义,Spring 提供了一个<property-placeholder>元素,可以在be ...

  5. centos下cmake编译安装mysql5.7.24

    一.centos6.5推荐最小安装.自定义添加如图两个包 二.安装cmake3.0(mysql5.7要求cmake2.9以上.cmake3.1要求gcc g++4.8以上.所以选自3.0) 1.分别执 ...

  6. mybatis 使用oracle merge into 语句踩坑实录

    由于需求涉及oracle的clob类型字段,在mybatis的mapper xml文件中编写merge into语句时总是失败. 附上错误代码 <insert id="mergeInt ...

  7. php+google/baidu翻译接口

    <?php /** * @link http://www.joinf.com * @copyright Copyright (C) 2017 joinf.com. All rights rese ...

  8. [转]python实现RESTful服务(基于flask)

    python实现RESTful服务(基于flask) 原文: https://www.jianshu.com/p/6ac1cab17929  前言 上一篇文章讲到如何用java实现RESTful服务, ...

  9. 【巷子】---redux---【react】

    一.flux的缺陷 因为dispatcher和Store可以有多个互相管理起来特别麻烦 二.什么是redux 其实redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 ...

  10. plsql 创建表空间、用户、赋予权限

    plsql 创建表空间.用户.赋予权限 --用户名:testuser --密码:bzhs!*6 --1.创建表空间--用SYSTEM用户登陆数据库,执行下面语句创建表空间CREATE TABLESPA ...