1.0 性能监控介绍 性能优化就是找到系统处理中的瓶颈以及去除这些的过程 ,多数管理员相信看一些相关的 "cook book" 就可以实现性能优化,通常通过对内核的一些配置是可以简单的解决问题 ,但并不适合每个环境 ,性能优化其实是对 OS 各子系统达到一种平衡的定义,这些子系统包括了: CPU Memory IO Network 这些子系统之间关系是相互彼此依赖的 ,任何一个高负载都会导致其他子系统出现问题 .比如: 大量的页调入请求导致内存队列的拥塞 网卡的大吞吐量可能导致更多的 CPU 开销 大量的 CPU 开销又会尝试更多的内存使用请求 大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题 所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的. 1.1 确定应用类型 基于需要理解该从什么地方来入手优化瓶颈 ,首先重要的一点 ,就是理解并分析当前系统的特点 ,多数系统所跑的应用类型 ,主要为 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 1 procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy wa id 1 0 138592 17932 126272 214244 0 0 1 18 109 19 2 1 1 96 0 0 138592 17932 126272 214244 0 0 0 0 105 46 0 1...