资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Linux 系统和性能监控之 CPU 篇1 / 13Linux 系统和性能监控之 CPU 篇 摘要:性能优化就是找到系统处理中的瓶颈以及去除这些的过程。本文由 sanotes.net 站长 tonnyom 在2009 年 8 月翻译自 Linux System and Performance Monitoring 系列文章。本文是系列的第一篇,讲述 CPU方面的性能监控。 编者注:本文由 sanotes.net 站长 tonnyom 在 2009 年 8 月翻译自 Linux System and Performance Monitoring 系列文章。本文是系列的第一篇,讲述 CPU 方面的性能监控。前言: 网上其实有很多关于这方面的文章,那为什么还会有此篇呢,有这么几个原因,是我翻译的动力,第一,概念和内容虽然老套,但都讲得很透彻,而且还很全面.第二,理论结合实际,其中案例分析都不错.第三,不花哨,采用的工具及命令都是最基本的,有助于实际操作。但本人才疏学浅,译文大多数都是立足于自己对原文的理解,大家也可以自己去 OSCAN 上找原文,如果有什么较大出入,还望留言回复,甚是感激!1.0 性能监控介绍性能优化就是找到系统处理中的瓶颈以及去除这些的过程,多数管理员相信看一些相关的cook book就可以实现性能优化,通常通过对内核的一些配置是可以简单的解决问题,但并不适合每个环境,性能优化其实是对 OS 各子系统达到一种平衡的定义,这些子系统包括了:CPUMemoryIONetwork这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:1. 大量的页调入请求导致内存队列的拥塞 2. 网卡的大吞吐量可能导致更多的 CPU 开销 3. 大量的 CPU 开销又会尝试更多的内存使用请求 4. 大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题 所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的.1.1 确定应用类型Linux 系统和性能监控之 CPU 篇2 / 13基于需要理解该从什么地方来入手优化瓶颈,首先重要的一点,就是理解并分析当前系统的特点,多数系统所跑的应用类型,主要为 2 种:IO Bound(译注 :IO 范畴): 在这个范畴中的应用 ,一般都是高负荷的内存使用以及存储系统,这实际上表示 IO 范畴的应用 ,就是一个大量数据处理的过程 .IO 范畴的应用不对 CPU以及网络发起更多请求(除非类似 NAS 这样的网络存储硬件 ).IO 范畴的应用通常使用 CPU 资源都是为了产生 IO 请求以及进入到内核调度的 sleep 状态.通常数据库软件( 译注:mysql,oracle 等)被认为是 IO 范畴的应用类型.CPU Bound(译注 :CPU 范畴): 在这个范畴中的应用,一般都是高负荷的 CPU 占用. CPU 范畴的应用,就是一个批量处理 CPU 请求以及数学计算的过程.通常 web server,mail server,以及其他类型服务被认为是 CPU 范畴的应用类型.1.2 确定基准线统计系统利用率情况,一般随管理员经验以及系统本身用途来决定.唯一要清楚的就是,系统优化希望达成什么效果,以及哪些方面是需要优化,还有参考值是什么?因此就建立一个基准线,这个统计数据必须是系统可用性能状态值,用来比较不可用性能状态值.在以下例子中,1 个系统性能的基准线快照,用来比较当高负荷时的系统性能快照.# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id1 0 138592 17932 126272 214244 0 0 1 18 109 19 2 1 1 960 0 138592 17932 126272 214244 0 0 0 0 105 46 0 1 0 990 0 138592 17932 126272 214244 0 0 0 0 198 62 40 14 0 450 0 138592 17932 126272 214244 0 0 0 0 117 49 0 0 0 1000 0 138592 17924 126272 214244 0 0 0 176 220 938 3 4 13 800 0 138592 17924 126272 214244 0 0 0 0 358 1522 8 17 0 751 0 138592 17924 126272 214244 0 0 0 0 368 1447 4 24 0 720 0 138592 17924 126272 214244 0 0 0 0 352 1277 9 12 0 79Linux 系统和性能监控之 CPU 篇3 / 13# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id2 0 145940 17752 118600 215592 0 1 1 18 109 19 2 1 1 962 0 145940 15856 118604 215652 0 0 0 468 789 108 86 14 0 03 0 146208 13884 118600 214640 0 360 0 360 498 71 91 9 0 02 0 146388 13764 118600 213788 0 340 0 340 672 41 87 13 0 02 0 147092 13788 118600 212452 0 740 0 1324 620 61 92 8 0 02 0 147360 13848 118600 211580 0 720 0 720 690 41 96 4 0 02 0 147912 13744 118192 210592 0 720 0 720 605 44 95 5 0 02 0 148452 13900 118192 209260 0 372 0 372 639 45 81 19 0 02 0 149132 13692 117824 208412 0 372 0 372 457 47 90 10 0 0从上面第一个结果可看到,最后一列(id) 表示的是空闲时间,我们可以看到,在基准线统计时,CPU 的空闲时间在 79% - 100%.在第二个结果可看到 ,系统处于 100%的占用率以及没有空闲时间.从这个比较中,我们就可以确定是否是 CPU 使用率应该被优化.2.0 安装监控工具多数 *nix 系统都有一堆标准的监控命令 .这些命令从一开始就是*nix 的一部分.Linux 则通过基本安装包以及额外包提供了其他监控工具,这些安装包多数都存在各个 Linux 发布版本中.尽管还有其他更多的开源以及第三方监控软件,但本文档只讨论基于 Linux 发布版本的监控工具.本章将讨论哪些工具怎样来监控系统性能.工具 描述 Base 是否在软件源仓库中vmstat all purpose performance tool yes yesmpstat provides statistics per CPU no yesLinux 系统和性能监控之 CPU 篇4 / 13sar all purpose performance monitoring tool no yesiostat provides disk statistics no yesnetstat provides network statistics yes yesdstat monitoring statistics aggregator no in most distributionsiptraf traffic monitoring dashboard no yesnetperf Network bandwidth tool no In some distributionsethtool reports on Ethernet interface configuration yes yesiperf Network bandwidth tool no yestcptrace Packet analysis tool no yes3.0 CPU 介绍CPU 利用率主要依赖于是什么资源在试图存取.内核调度器将负责调度 2 种资源种类:线程( 单一或者多路)和中断.调度器去定义不同资源的不同优先权 .以下列表从优先级高到低排列:Interrupts(译注:中断) - 设备通知内核,他们完成一次数据处理的过程.例子,当一块网卡设备递送网络数据包或者一块硬件提供了一次 IO 请求.Kernel(System) Processes(译注: 内核处理过程) - 所有内核处理过程就是控制优先级别.User Processes(译注:用户进程 ) - 这块涉及userland.所有软件程序都运行在这个 user space.这块在内核调度机制中处于低优先级.从上面,我们可以看出内核是怎样管理不同资源的.还有几个关键内容需要介绍,以下部分就将介绍 context(译注:上下文切换),run queues(译注: 运行队列)以及 utilization(译注: 利用率).3.1 上下文切换Linux 系统和性能监控之 CPU 篇5 / 13多数现代处理器都能够运行一个进程(单一线程) 或者线程 .多路超线程处理器有能力运行多个线程.然而,Linux 内核还是把每个处理器核心的双核心芯片作为独立的处理器.比如,以 Linux 内核的系统在一个双核心处理器上,是报告显示为两个独立的处理器.一个标准的 Linux 内核可以运行 50 至 50,000 的处理线程.在只有一个 CPU 时,内核将调度并均衡每个进程线程.每个线程都分配一个在处理器中被开销的时间额度.一个线程要么就是获得时间额度或已抢先获得一些具有较高优先级(比如硬件中断), 其中较高优先级的线程将从区域重新放置回处理器的队列中.这种线程的转换关系就是我们提到的上下文切换.每次内核的上下文切换,资源被用于关闭在 CPU 寄存器中的线程和放置在队列中.系统中越多的上下文切换,在处理器的调度管理下,内核将得到更多的工作.3.2 运行队列每个 CPU 都维护一个线程的运行队列.理论上,调度器应该不断的运行和执行线程.进程线程不是在 sleep 状态中(译注: 阻塞中和等待 IO 中)或就是在可运行状态中.如果 CPU 子系统处于高负荷下,那就意味着内核调度将无法及时响应系统请求.导致结果,可运行状态进程拥塞在运行队列里.当运行队列越来越巨大,进程线程将花费更多的时间获取被执行.比较流行的术语就是load,它提供当前运行队列的详细状态.系统 load 就是指在 CPU 队列中有多少数目的线程,以及其中当前有多少进程线程数目被执行的组合.如果一个双核系统执行了 2 个线程,还有 4 个在运行队列中,则 load 应该为 6. top 这个程序里显示的 load averages 是指
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号