free命令详解 解释一下Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(FreeOutput)。例如:FO〔2〕〔1〕24677460FO〔3〕〔2〕10321516 123456 1totalusedfreesharedbufferscached 2Mem:24677460232760641401396087054012084008 3bufferscache:1032151614355944 4Swap:2515148422418824927296 free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。 free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。 第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:24677460KB(缺省时free的单位为KB)物理内存,即FO〔2〕〔1〕;在这些物理内存中有23276064KB(即FO〔2〕〔2〕)被使用了;还用1401396KB(即FO〔2〕〔3〕)是可用的; 这里得到第一个等式:FO〔2〕〔1〕FO〔2〕〔2〕FO〔2〕〔3〕 FO〔2〕〔4〕表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。 FO〔2〕〔5〕表示被OSbuffer住的内存。FO〔2〕〔6〕表示被OScache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:Abufferissomethingthathasyettobewrittentodisk。Acacheissomethingthathasbeenreadfromthediskandstoredforlateruse。 也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。 Linux和其他成熟的操作系统(例如windows),为了提高IOread的性能,总是要多cache一些数据,这也就是为什么FO〔2〕〔6〕(cachedmemory)比较大,而FO〔2〕〔3〕比较小的原因。我们可以做一个简单的测试:释放掉被系统cache占用的数据;echo3procsysvmdropcaches 读一个大文件,并记录时间;关闭该文件;重读这个大文件,并记录时间; 第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作,大概要读5G的文件,几千万条记录。在我的环境上,第二次读比第一次大概可以快9倍左右。 free输出的第二行是从一个应用程序的角度看系统内存的使用情况。对于FO〔3〕〔2〕,即bufferscache,表示一个应用程序认为系统被用掉多少内存;对于FO〔3〕〔3〕,即bufferscache,表示一个应用程序认为系统还有多少内存; 因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO〔3〕〔3〕比FO〔2〕〔3〕会大很多。 这里还用两个等式:FO〔3〕〔2〕FO〔2〕〔2〕FO〔2〕〔5〕FO〔2〕〔6〕FO〔3〕〔3〕FO〔2〕〔3〕FO〔2〕〔5〕FO〔2〕〔6〕 这二者都不难理解。 free命令由procps。。rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从procmeminfo中读出的。 在系统上可能有meminfo(2)这个函数,它就是为了解析procmeminfo的。procps这个包自己实现了meminfo()这个函数。可以下载一个procps的tar包看看具体实现,现在最新版式3。2。8。linux关机命令详解 linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。 首先来看一下linux下比较常用的一些关机命令 关机命令: 1、halt立刻关机2、poweroff立刻关机3、shutdownhnow立刻关机(root用户使用)4、shutdownh1010分钟后自动关机如果是通过shutdown命令设置关机的话,可以用shutdownc命令取消重启 重启命令: 1、reboot2、shutdownrnow立刻重启(root用户使用)3、shutdownr10过10分钟自动重启(root用户使用)4、shutdownr20:35在时间为20:35时候重启(root用户使用)如果是通过shutdown命令设置重启的话,可以用shutdownc命令取消重启 下面我们来看看linux的这些具体的关机命令之间的区别和各自的用法 1。shutdown安全的关机命令 对于shutdown命令,它是大家都推荐的一个安全的命令,通过参数h或r的配合来完成关机或重启。不过在linux系统中只有拥有root权限才可以使用这个命令。所以,虽然大家都推荐用这个命令,但是这个命令用起来真的不太方便:想要用这个命令吗?先去获得root权限吧。shutdown执行关机,是送信号给init,要求它改变运行级别,以此来关机。关机或重启实际上是运行级别的调整,所以我们也可以用init直接调整运行级别来进行关机或重启。使用这个命令时,机器立即关机或重启。它也需要root权限。 那么为什么说shutdown命令是安全地将系统关机呢? 实际中有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失使系统处于不稳定的状态。甚至在有的系统中会损坏硬件设备。而在系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结,即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的,还有可能是重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。 shutdown执行它的工作是送信号〔signal〕给init程序,要求它改变runlevel。runlevel0被用来停机〔halt〕,runlevel6是用来重新激活〔reboot〕系统,而runlevel1则是被用来让系统进入管理工作可以进行的状态,这是预设的。假定没有h也没有r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作?你可以在这个文件etcinittab里看到这些runlevels相关的资料。 shutdown参数说明: 〔t〕在改变到其它runlevel之前,告诉init多久以后关机。〔r〕重启计算器。〔k〕并不真正关机,只是送警告信号给每位登录者〔login〕。〔h〕关机后关闭电源〔halt〕。〔n〕不用init而是自己来关机。不鼓励使用这个选项,而且该选项所产生的后果往往不总是你所预期得到的。〔c〕cancelcurrentprocess取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。〔f〕在重启计算器〔reboot〕时忽略fsck。〔F〕在重启计算器〔reboot〕时强迫fsck。〔time〕设定关机〔shutdown〕前的时间。2。halt最简单的关机命令 用halt命令来关机时,实际调用的是shutdownh。halt执行时将杀死应用进程,执行sync系统调用文件系统写操作完成后就会停止内核。 halt参数说明: 〔n〕防止sync系统调用,它用在用fsck修补根分区之后,以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。〔w〕并不是真正的重启或关机,只是写wtmp〔varlogwtmp〕纪录。〔d〕不写wtmp纪录〔已包含在选项〔n〕中〕。〔f〕没有调用shutdown而强制关机或重启。〔i〕关机〔或重启〕前关掉所有的网络接口。〔p〕该选项为缺省选项。就是关机时调用poweroff。 3。poweroff常用的关机命令 对于poweroff,网上说它是halt命令的链接,基本用法和halt差不多,这里就不多说了。 4。init init是所有进程的祖先,他是Linux系统操作中不可缺少的程序之一。它的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,守护进程等。shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init0为关机,init1为重启。 5。reboot重启命令 reboot的工作过程差不多跟halt一样。不过它是引发主机重启,而halt是关机。它的参数与halt相差不多。useradd命令详解 在Linux中useradd是个很基本的命令,但是使用起来却很不直观。以至于在Ubuntu中居然添加了一个adduser命令来简化添加用户的操作。本文主要描述笔者在学习使用useradd命令时的一些测试结果。 说明:本文中的所有试验都是在Ubuntu14。04上完成。 功能 在Linux中useradd命令用来创建或更新用户信息。 useradd命令属于比较难用的命令(lowlevelutilityforaddingusers),所以Debian系的发行版中建议管理员使用adduser命令。其实adduser命令只是一个调用了useradd命令的脚本文件。 本文将详细分析群组和家目录相关的选项。并且以实例的方式介绍常用的useradd命令写法。 语法和基本选项 注意:本文并不是一个完整的文档,所以仅列出部分常用的选项进行说明。useradd〔option〕username〔option〕:d登入目录指定用户登入时的目录。g群组初始群组。G群组非初始群组。m自动创建用户的家目录。M不要创建用户的家目录。N不要创建以用户名称为名的群组。s指定用户登入后所使用的shell。 细说用户组 首先我们要搞清楚,什么是初始群组?简单来说在etcpasswd文件中,每行的第四个字段指定的就是用户的初始群组。用户登录后立即就拥有了初始群组中的权限。 下面我们通过不同的命令来查看群组选项的用法:sudouseraddtester1 没有使用任何群组相关的参数,默认在创建用户tester1的同时会创建一个同名的群组。用户tester1的初始群组就是这个新建的群组。sudouseraddtester2N 这次我们使用了N选项,即不要生成与用户同名的群组。查看下etcpasswd文件,发现tester2用户的初始群组ID是100。这个100是哪来的?有ID为100的群组吗?其实100作为N的默认值是写在配置文件中的。不管有没有ID为100的群组,都是这个值。当然我们也可以通过修改配置文件来改变这个默认值!sudouseraddtester3gsudo sudo是一个非常有权势的群组,我决定把tester3加入到这个群组。好,现在去查看一下etcpasswd和etcgroup文件,看看有没有新的群组被创建?tester3的初始群组又是谁?这次没有创建与tester3同名的群组。用户tester3的初始群组变成了sudo。sudouseraddtester4Gsudo 和上一条命令相比我们只是把小写的g替换成了大写的G。但结果可相差太多了,请您一定要好好的检查etcpasswd和etcgroup文件。因为这次不仅创建了群组tester4,它还是用户tester4的初始群组。和tester1的唯一不同是tester4被加入了sudo群组。 在实际的使用中,tester3和tester4的场景都是比较常见的,需要根据实际情况进行区分。 细说家目录 Useradd命令对用户家目录的处理让人困惑,下面我们将通过实验来了解家目录相关的不同选项的使用方法:sudouseraddtester1 让我们重新看看创建用户tester1这条命令。它不会为用户tester1创建名为tester1的目录作为家目录,但是我们打开etcpasswd文件,发现tester1的记录中居然包含了家目录hometester1。tester1:x:1005:1005::hometester1: 这让人不可思议,但这条命令确实是这么实现的。sudouseraddmtester5 若要在创建用户的同时创建用户的家目录,必须指定m选项。sudouseradddhomeabctester6 我们希望自己指定家目录,此时不生成目录abcsudouseradddhomeabcdmtester7 此时生成目录abcd,并且目录下默认存在文件 常见用例 Case1:创建一个带有家目录并且可以登录bash的用户sudouseraddmsbinbashtester1 Case2:指定创建用户家目录的路径sudouseraddmdhomexxxtester2 homexxx目录会被创建。 Case3:创建一个没有家目录且不能登录的用户sudouseraddssbinnologintester3 Case4:创建时把用户加入不同的用户组sudouseraddmGxxx,sudotester4 注意过个组名使用逗号分隔,不能有空格。netstat命令详解 Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态(InterfaceStatistics),masquerade连接,多播成员(MulticastMemberships)等等。 输出信息含义 执行netstat后,其输出结果为ActiveInternetconnections(woservers)ProtoRecvQSendQLocalAddressForeignAddressStatetcp02210。34。6。89:telnet210。34。6。96:2873ESTABLISHEDtcp2960210。34。6。89:1165210。34。6。84:netbiosssnESTABLISHEDtcp00localhost。localdom:9001localhost。localdom:1162ESTABLISHEDtcp00localhost。localdom:1162localhost。localdom:9001ESTABLISHEDtcp080210。34。6。89:1161210。34。6。10:netbiosssnCLOSEActiveUNIXdomainsockets(woservers)ProtoRefCntFlagsTypeStateINodePathunix1〔〕STREAMCONNECTED16178000000ddunix1〔〕STREAMCONNECTED16176000000dcunix9〔〕DGRAM5292devlogunix1〔〕STREAMCONNECTED16182000000df 从整体上看,netstat的输出结果可以分为两个部分: 一个是ActiveInternetconnections,称为有源TCP连接,其中RecvQ和SendQ指0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。 另一个是ActiveUNIXdomainsockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。 Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。 常见参数 a(all)显示所有选项,默认不显示LISTEN相关 t(tcp)仅显示tcp相关选项 u(udp)仅显示udp相关选项 n拒绝显示别名,能显示数字的全部转化成数字。 l仅列出有在Listen(监听)的服務状态 p显示建立相关链接的程序名 r显示路由信息,路由表 e显示扩展信息,例如uid等 s按各个协议进行统计 c每隔一个固定时间,执行该netstat命令。 提示:LISTEN和LISTENING的状态只有用a或者l才能看到 实用命令实例 1。列出所有端口(包括监听和未监听的) 列出所有端口netstatanetstatamoreActiveInternetconnections(serversandestablished)ProtoRecvQSendQLocalAddressForeignAddressStatetcp00localhost:30037:LISTENudp00:bootpc:ActiveUNIXdomainsockets(serversandestablished)ProtoRefCntFlagsTypeStateINodePathunix2〔ACC〕STREAMLISTENING6135tmp。X11unixX0unix2〔ACC〕STREAMLISTENING5140varrunacpid。socket 列出所有tcp端口netstatatnetstatatActiveInternetconnections(serversandestablished)ProtoRecvQSendQLocalAddressForeignAddressStatetcp00localhost:30037:LISTENtcp00localhost:ipp:LISTENtcp00:smtp:LISTENtcp600localhost:ipp〔::〕:LISTEN 列出所有udp端口netstataunetstatauActiveInternetconnections(serversandestablished)ProtoRecvQSendQLocalAddressForeignAddressStateudp00:bootpc:udp00:49119:udp00:mdns: 2。列出所有处于监听状态的Sockets 只显示监听端口netstatlnetstatlActiveInternetconnections(onlyservers)ProtoRecvQSendQLocalAddressForeignAddressStatetcp00localhost:ipp:LISTENtcp600localhost:ipp〔::〕:LISTENudp00:49119: 只列出所有监听tcp端口netstatltnetstatltActiveInternetconnections(onlyservers)ProtoRecvQSendQLocalAddressForeignAddressStatetcp00localhost:30037:LISTENtcp00:smtp:LISTENtcp600localhost:ipp〔::〕:LISTEN 只列出所有监听udp端口netstatlunetstatluActiveInternetconnections(onlyservers)ProtoRecvQSendQLocalAddressForeignAddressStateudp00:49119:udp00:mdns: 只列出所有监听UNIX端口netstatlxnetstatlxActiveUNIXdomainsockets(onlyservers)ProtoRefCntFlagsTypeStateINodePathunix2〔ACC〕STREAMLISTENING6294privatemaildropunix2〔ACC〕STREAMLISTENING6203publiccleanupunix2〔ACC〕STREAMLISTENING6302privateifmailunix2〔ACC〕STREAMLISTENING6306privatebsmtp 3。显示每个协议的统计信息 显示所有端口的统计信息netstatsnetstatsIp:11150totalpacketsreceived1withinvalidaddresses0forwarded0incomingpacketsdiscarded11149incomingpacketsdelivered11635requestssentoutIcmp:0ICMPmessagesreceived0inputICMPmessagefailed。Tcp:582activeconnectionsopenings2failedconnectionattempts25connectionresetsreceivedUdp:1183packetsreceived4packetstounknownportreceived。。。。。。 显示TCP或UDP端口的统计信息netstatst或sunetstatstnetstatsu 4。在netstat输出中显示PID和进程名称netstatp netstatp可以与其它开关一起使用,就可以添加PID进程名称到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。netstatptActiveInternetconnections(woservers)ProtoRecvQSendQLocalAddressForeignAddressStatePIDProgramnametcp10rameshlaptop。loc:47212192。168。185。75:wwwCLOSEWAIT2109firefoxtcp00rameshlaptop。loc:52750lax:wwwESTABLISHED2109firefox 5。在netstat输出中不显示主机,端口和用户名(host,portoruser) 当你不想让主机,端口和用户名显示,使用netstatn。将会使用数字代替那些名称。 同样可以加速输出,因为不用进行比对查询。netstatan 如果只是不想让这三个名称中的一个被显示,使用以下命令netsatanumericportsnetsatanumerichostsnetsatanumericusers 6。持续输出netstat信息 netstat将每隔一秒输出网络信息。netstatcActiveInternetconnections(woservers)ProtoRecvQSendQLocalAddressForeignAddressStatetcp00rameshlaptop。loc:36130101101181225。ama:wwwESTABLISHEDtcp11rameshlaptop。loc:52564101。11。169。230:wwwCLOSINGtcp00rameshlaptop。loc:43758server101101432:wwwESTABLISHEDtcp11rameshlaptop。loc:42367101。101。34。101:wwwCLOSINGC 7。显示系统不支持的地址族(AddressFamilies)netstatverbose 在输出的末尾,会有如下的信息netstat:nosupportforAFIPXonthissystem。netstat:nosupportforAFAX25onthissystem。netstat:nosupportforAFX25onthissystem。netstat:nosupportforAFNETROMonthissystem。 8。显示核心路由信息netstatrnetstatrKernelIProutingtableDestinationGatewayGenmaskFlagsMSSWindowirttIface192。168。1。0255。255。255。0U000eth2linklocal255。255。0。0U000eth2default192。168。1。10。0。0。0UG000eth2 注意:使用netstatrn显示数字格式,不查询主机名称。 9。找出程序运行的端口 并不是所有的进程都能找到,没有权限的会不显示,使用root权限查看所有的信息。netstatapgrepsshtcp10devdb:ssh101。174。100。22:39213CLOSEWAITtcp10devdb:ssh101。174。100。22:57643CLOSEWAIT 找出运行在指定端口的进程netstatangrep:80 10。显示网络接口列表netstatiKernelInterfacetableIfaceMTUMetRXOKRXERRRXDRPRXOVRTXOKTXERRTXDRPTXOVRFlgeth01500000000000BMUeth2150002619600026883600BMRUlo16436040004000LRU 显示详细信息,像是ifconfig使用netstatie:netstatieKernelInterfacetableeth0Linkencap:EthernetHWaddr00:10:40:11:11:11UPBROADCASTMULTICASTMTU:1500Metric:1RXpackets:0errors:0dropped:0overruns:0frame:0TXpackets:0errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:0(0。0B)TXbytes:0(0。0B)Memory:f6ae0000f6b00000 11。IP和TCP分析 查看连接某服务端口最多的的IP地址wss884ubuntu:netstatnatgrep192。168。1。15:22awk{print5}awkF:{print1}sortuniqcsortnrhead2018221。136。168。363154。74。45。242278。173。31。236262。183。207。982192。168。1。142182。48。111。2152124。193。219。342119。145。41。22114。255。41。30175。102。11。99 TCP各种状态列表wss8848ubuntu:netstatnatawk{print6}established)ForeignLISTENTIMEWAITESTABLISHEDTIMEWAITSYNSENT先把状态全都取出来,然后使用uniqc统计,之后再进行排序。wss8848ubuntu:netstatnatawk{print6}sortuniqc143ESTABLISHED1FINWAIT11Foreign1LASTACK36LISTEN6SYNSENT113TIMEWAIT1established)最后的命令如下:netstatnatawk{print6}sortuniqcsortrn分析access。log获得访问前10位的ip地址awk{print1}access。logsortuniqcsortnrhead10iostat命令详解 Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能,cpu使用,带宽使用等信息,偶然发现,不同系统均提供有性能分析工具的,代理可通过这些命令获取系统性能信息,个人猜测,不知道具体是不是这样的。其中iostat可以给我们提供丰富的IO状态数据,下边就来看一下iostat如何使用,命令能够输出那些信息。 简述 Linux系统中通过iostat我们能查看到系统IO状态信息,从而确定IO性能是否存在瓶颈。 命令安装 iostat是查看Linux系统io是否存在瓶颈顶好用的一个命令,但是由此而系统默认没有安装的,以centos系统为例,看看如何安装iostat命令。〔rootlocalhost〕iostatbash:iostat:commandnotfound〔rootlocalhost〕yuminstallysysstat 命令使用〔rootlocalhost〕iostathelpUsage:iostat〔options〕〔interval〔count〕〕Optionsare:〔c〕〔d〕〔N〕〔n〕〔h〕〔km〕〔t〕〔V〕〔x〕〔y〕〔z〕〔j{IDLABELPATHUUID。。。}〔device〔。。。〕ALL〕〕〔device〔。。。〕ALL〕〔p〔device〔,。。。〕ALL〕〕 iostat主要有三个操作箱,options操作项,interval指定统计时间间隔,count总共输出次数 c参数,可以用来插卡部分cpu状态信息〔rootlocalhost〕iostatcLinux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)avgcpu:usernicesystemiowaitstealidle0。020。000。000。000。0099。98 k参数,某些使用block为单位的列强制使用Kilobytes为单位〔rootlocalhost〕iostatk110Linux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)avgcpu:usernicesystemiowaitstealidle0。020。000。000。000。0099。98Device:tpskBreadskBwrtnskBreadkBwrtnsda0。140。041。6596991541732790dm00。420。041。6593626941632492dm10。000。000。001992062056dm20。000。000。00100138212dm30。000。010。001274057160avgcpu:usernicesystemiowaitstealidle0。000。000。000。000。00100。00Device:tpskBreadskBwrtnskBreadkBwrtnsda4。000。0048。00048dm012。000。0048。00048dm10。000。000。0000dm20。000。000。0000dm30。000。000。0000 d参数,显示设备(磁盘)使用状态〔rootlocalhost〕iostatd13Linux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)Device:tpsBlkreadsBlkwrtnsBlkreadBlkwrtnsda0。140。083。31193983083470564dm00。420。073。30187253883269968dm10。000。000。0039840124112dm20。000。000。00200276424dm30。000。010。0025481014320解释一下输出列表示什么意思:tps:该设备每秒的传输次数(Indicatethenumberoftransferspersecondthatwereissuedtothedevice。)。一次传输意思是一次IO请求。多个逻辑请求可能会被合并为一次IO请求。一次传输请求的大小是未知的。kBreads:每秒从设备(driveexpressed)读取的数据量;kBwrtns:每秒向设备(driveexpressed)写入的数据量;kBread:读取的总数据量;kBwrtn:写入的总数量数据量;这些单位都为Kilobytes。上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39。29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和) x参数,输出更多详细信息〔rootlocalhost〕iostatx12Linux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)avgcpu:usernicesystemiowaitstealidle0。020。000。000。000。0099。98Device:rrqmswrqmsrswsrsecswsecsavgrqszavgquszawaitrawaitwawaitsvctmutilsda0。000。270。000。140。083。3123。780。000。311。510。290。160。00dm00。000。000。000。410。073。308。130。002。642。052。640。060。00dm10。000。000。000。000。000。008。000。002。291。612。510。080。00dm20。000。000。000。000。000。008。010。0019。820。6420。300。030。00dm30。000。000。000。000。010。0030。850。000。040。020。200。020。00解释一下x参数输出列意思rrqms:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqms:每秒这个设备相关的写入请求有多少被Merge了。rsecs:每秒读取的扇区数;wsec:每秒写入的扇区数。rs:Thenumberofreadrequeststhatwereissuedtothedevicepersecond;ws:Thenumberofwriterequeststhatwereissuedtothedevicepersecond;await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0。8秒在处理IO,而0。2秒闲置,那么该设备的util0。8180,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100表示设备已经接近满负荷运行了(当然如果是多磁盘,即使util是100,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。 常见用法iostatdk110查看TPS和吞吐量信息iostatdxk110查看设备使用率(util)、响应时间(await)iostatc110查看cpu状态 使用实例 查看指定磁盘吞吐量和速率〔rootlocalhost〕iostatdd11Linux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)Device:tpsBlkreadsBlkwrtnsBlkreadBlkwrtnsda0。140。083。31193983083482716dm00。420。073。30187253883282120dm10。000。000。0039840124112dm20。000。000。00200276424dm30。000。010。0025481014320从结果看到平均传输次数0。14,每秒读取0。08M,每秒写3。31M 磁盘性能统计〔rootlocalhost〕iostatxk11Linux2。6。32573。el6。x8664(localhost)06302017x8664(4CPU)avgcpu:usernicesystemiowaitstealidle0。020。000。000。000。0099。98Device:rrqmswrqmsrswsrkBswkBsavgrqszavgquszawaitrawaitwawaitsvctmutilsda0。000。270。000。140。041。6523。780。000。311。510。290。160。00