------------------------------------------《Linux系统和网络性能监测》读书笔记-------------------------------------------0《《《《LinuxLinuxLinuxLinux系统和网络性能监测》系统和网络性能监测》系统和网络性能监测》系统和网络性能监测》读书笔记By:星星from《Linux系统和网络性能监测》读书笔记-------------------------------------------11.0性能监测简介性能调优是找出系统瓶颈并消除这些瓶颈的过程。很多系统管理员认为性能调优仅仅是调整一下内核的参数即可解决问题,事实上情况并不是这样。性能调优是实现操作系统的各个子系统之间的平衡性,这些子系统包括:****CPUCPUCPUCPU****MemoryMemoryMemoryMemory****IOIOIOIO****NetworkNetworkNetworkNetwork子系统之间相互依存,任何一个子系统的负载过度都能导致其他子系统出现问题,例如:****大量的page-inpage-inpage-inpage-inIOIOIOIO请求可能导致内存队列被塞满****网卡的巨量吞吐可能导致CPUCPUCPUCPU资源耗尽****系统尝试保持释放内存队列时可能耗尽CPUCPUCPUCPU资源****来自内存的大量磁盘写入请求可能导致CPUCPUCPUCPU资源和IOIOIOIO通道耗尽性能调优的前提是找出系统瓶颈之所在,尽管问题看似由某个子系统所导致,然而这很可能是另外一个子系统的过载所引起的。1.1判定应用的类型为了明白从何处开始着手调整性能瓶颈,弄清被分析系统的性能表现是首要任务。任何系统的应用常可分为以下两类:****IOIOIOIO限制型——一个IOIOIOIO限制型的应用需要大量的内存和基础存储设备占用。因其需要大量的数据读写请求,此类应用对CPUCPUCPUCPU和网络需求不高(除非存储系统在网络上)。IOIOIOIO限制型应用使用CPUCPUCPUCPU资源来进行IOIOIOIO操作且常进入睡眠状态。数据库应用常被认为属于此类。****CPUCPUCPUCPU限制型——一个CPUCPUCPUCPU限制型应用需要大量的CPUCPUCPUCPU资源,来进行批量的处理或大量的计算。大容量webwebwebweb服务,mailmailmailmail服务,以及任何类型的渲染服务都被归到此类。1.2判定基准信息系统的利用率因管理员的期望值和系统的参数值而异,判断一个系统是否有性能问题的唯一途径是弄清楚对系统的期望是神马,需求的性能是神马,应该得到的数据是神马?而为了建立这些信息的唯一途径是为系统建立一个基准。在性能可接受的状态下必须为系统建立统计信息,这样就可以在性能不可接受时进行对比。在下面的例子中,将对两种状态下的统计信息进行对比:#vmstat1procsmemoryswapiosystemcpurbswpdfreebuffcachesisobiboincsussywaid101385921793212627221424400118109192119600138592179321262722142440000105460109900138592179321262722142440000198624014045------------------------------------------《Linux系统和网络性能监测》读书笔记-------------------------------------------200138592179321262722142440000117490001000013859217924126272214244000176220938341380001385921792412627221424400003581522817075101385921792412627221424400003681447424072001385921792412627221424400003521277912079#vmstat1procsmemoryswapiosystemcpurbswpdfreebuffcachesisobiboincsussywaid2014594017752118600215592011181091921196201459401585611860421565200046878910886140030146208138841186002146400360036049871919002014638813764118600213788034003406724187130020147092137881186002124520740013246206192800201473601384811860021158007200720690419640020147912137441181922105920720072060544955002014845213900118192209260037203726394581190020149132136921178242084120372037245747901000只需要看代表idle时间的最后一列(id)就能发现问题,在基准数据中CPU空闲时间在79%-100%之间,在高负荷状态下系统利用率100%且无空闲。需要考虑的是CPU这块的问题。2.0安装监测工具大多*nix系统均自带了很多标准监测命令,也有的是第三方工具:工具名称描述基础安装包可选安装包vmstat多功能YYmpstatCPU性能NYsar多功能NYiostat磁盘性能NYnetstat网络性能YYdstat多功能N大多数iptraf流量监测NYnetperf网络带宽N大多数ethtool网卡监测YYiperf网络带宽NYtcptrace数据包监测NYiotopIO监测NY------------------------------------------《Linux系统和网络性能监测》读书笔记-------------------------------------------33.0CPU介绍CPU利用率很大部分取决于试图访问它的资源,内核拥有一个管理两种资源的调度器:线程(单或多)和中断。调度器给予不同资源以不同的优先级,以下由优先级从高到低:****中断——设备通知内核它们处理完成。例如网卡发送一个数据包或硬盘驱动器提供一次IOIOIOIO请求****内核(系统)进程——所有的内核进程都在此级别的优先级进行处理****用户进程——通常被称为“用户空间”,所有应用软件运行在用户空间,拥有最低的优先级为了弄明白内核是如何管理不同的资源的,几个关键概念需要提及一下:contextswitches,runqueues,utilization。3.1ContextSwitches(上下文切换)大多数处理器在同一时间只能处理一个进程或线程,多线程处理器可同时处理n个线程。然而,linux内核把多核处理器的各个核心当做独立核心。例如,内核把一个双核的处理当做两个独立处理器。一个标准的内核可同时处理50到50000个进程,在只有一颗CPU的情况下,内核必须调度和平衡这些进程和线程。每个线程在处理器上都拥有一个时间分配单元,当一个线程超过自己的时间单元或被更高优先级的程序抢占时,此线程及被传回队列而此时更高优先级的程序将在处理器上执行。这种线程间的切换操作即是上下文切换。3.2运行队列每个CPU维持着一个线程的运行队列,理论上,调度器应该是不断地运行和执行线程。线程要么处于睡眠状态,要么处于可运行状态。假如CPU子系统处于高负载状态,那么内核调度器罢工是有可能的,其结果将导致可运行状态的进程开始阻塞运行队列。运行队列越大,执行进程所花费的时间也越长。一个很流行的术语叫“load(负载)”经常被用来描述运行队列的状态,系统负载是由正在执行的进程和CPU运行队列中的进程的结合,如果有2个线程正在一个双核系统中执行且4个正在运行队列中,那么负载数即是6,像top等工具可查看过去1,5,15分钟的负载均值。3.3CPU利用率CPU利用率被定义为CPU使用的百分比,CPU如何被利用是衡量一个系统的重要标准。多数性能监测工具把CPU利用分为以下几个类型:****用户时间——CPUCPUCPUCPU花在执行用户空间进程的时间百分比****系统时间——CPUCPUCPUCPU花在执行内核进程和中断的时间百分比****IOIOIOIO等待——CPUCPUCPUCPU花在等待IOIOIOIO请求完成的时间百分比****IDLEIDLEIDLEIDLE——CPUCPUCPUCPU的空闲时间百分比------------------------------------------《Linux系统和网络性能监测》读书笔记-------------------------------------------44.0CPU性能监测理解CPU的性能状态即是理解中断,运行队列和上下文切换的状态。之前有提到过性能与基准信息有密切关系,但是有些常规的性能预期:****运行队列——每个处理器上的运行队列不应该有超过1-31-31-31-3个排队的线程。例如,一个双核系统不应该有超过6666个进行在运行队列里。****CPUCPUCPUCPU利用率——假如一个CPUCPUCPUCPU满状态负荷,那么以下的平衡关系需要达到:65%--70%65%--70%65%--70%65%--70%的用户时间30%--35%30%--35%30%--35%30%--35%的系统时间0%--5%0%--5%0%--5%0%--5%的空闲时间****上下文切换——上下文切换的数量与CPUCPUCPUCPU的利用率有直接关系。如果CPUCPUCPUCPU处于高负荷状态下那么大量的上下文切换是正常的。linux系统里有很多可以监测以上数据的工具,如vmstat和top。4.1vmstat工具的使用vmstat工具的低开销使得它可以在一个高负载的系统上持续运行,它有两种工作模式:均值模式和采样模式。采样模式如下:#vmstat1procs-----------memory-------------swap-------io------system------cpu----rbswpdfreebuffcachesisobiboincsussyidwa00104300168009532872200005267144195000104300168009532872200000241021641198000104300168009532872200000010095911980每个区域的含义:区域描述rrunqueue运行队列中的进程数bblocked等待IO请求完成的阻塞进程数ininterrupts正在处理的中断数cscontextswitches正在发生的上下文切换数ususer用户CPU时间百分比syssystem内核CPU时间百分比wawait可运行进程等待IO百分比ididleCPU空闲时间百分比4.2案例分析:CPU持续性利用#vmstat1procsmemoryswapiosystemcpurbswpdfreebuffcachesisobiboincsussywaid30206564150928033617608000007182681190020206564147728033617612000007582396400------------------------------------------《Linux系统和网络性能监测》读书笔记-------------------------------------------51020