
性能调优有时被称为“黑色艺术”,因为有时有效地调整一个系统,要求具有更深层次的知识,且需要了解一个系统的硬件和软件组成以及系统之间的相互作用。性能优化是针对特定环境来定制系统的配置过程,或者是让某个特定的应用程序得到更好的响应时间或吞吐量的过程。 本书首先对 Linux 操作系统进行了深入剖析,并对最常用的企业监控工具Benchmark 及其他监控工具进行了详细的介绍,此外分析了系统中识别和分析瓶颈的过程,最后阐述如何使用性能衡量工具,以及如何对系统4 大子系统进行调整,使系统以最优状态应对不同的工作环境。 本书适合广大 Linux 用户深入学习,并适合计算机专业本科、硕士等专业的学生学习参考。
前 言 Linux是由来自世界各地的开发者共同开发的一个开源的操作系统。它的源代码是免费提供的,可以在GNU通用公共许可证(GPL)下使用。有些公司将操作系统以发行版的方式提供给用户使用,比如Red Hat、Novell等。桌面级Linux发行版和企业级Linux发行版都可以从网络上免费下载。 在过去的十几年里,Linux已经进入全球范围内许多企业的数据中心。Linux操作系统同时也适合科研和企业用户群体。Linux是目前最通用的操作系统。你可以在嵌入式系统上找到Linux,比如防火墙、手机、大型机等。当然,Linux操作系统的性能对于科研和企业用户来说已经成为一个热门话题。然而,计算一个全球性的气象预报与操作系统上的数据库相比对主机有着不同的需求。Linux必须能够以最佳性能适应所有可能的使用场景。大多数Linux发行版中一般都包含调整参数,以适应所有用户。 现在大多数企业应用程序都可以在Linux上使用,包括文件和打印服务器、数据服务器、Web服务器及邮件服务器等。 我们需要对企业级服务器上使用的Linux进行性能监控,在必要的时候,对服务器做出调整以移除影响用户的瓶颈。本书介绍了调整Linux的方法,你可以使用工具监控和分析服务器的性能,为特定服务器的应用程序调整关键参数。本书主要介绍如何分析和调整Linux操作系统,让运行在这些系统上的任何类型的应用程序产生优异的性能。 本书在测试环境中使用的调整参数、基准测试结果、监控工具,都是基于Red Hat Enterprise Linux 6.x 64位系统的。但是,本书中的信息几乎对于所有的Linux硬件平台都是有帮助的。 什么是性能调优 性能调优有时被称为“黑色艺术”,因为有时有效地调整一个系统,要求具有更深层次的知识,且需要了解一个系统的硬件和软件组成,以及系统之间的相互作用。性能优化是针对特定环境来定制系统的配置过程,或者是让某个特定的应用程序得到更好的响应时间或吞吐量的过程。 首先,必须先建立调优的目标。用户需要交互式使用系统?需要频繁读写数据库?权衡这些之后,对系统进行调整以实现既具有高吞吐量又具有较低的延时(快速的响应时间)。实时应用程序需要可预测的延迟,那么调整系统可以最小化延迟或消除不可预知的延迟。 另一方面,人为因素也要考虑。有时可能需要对预测的性能和实际系统效率进行改善。系统处理并不关心是达到了5%的使用率还是95%的使用率,但要对哪些情况是更可取的有一个明确的意见。通常,性能调优是为了消除造成数据传输速度慢的阻塞。将设备的工作量分布到一天的时间当中可以解决在高峰时期系统资源的稀缺问题。 性能管理是指在确认计算机资源充足的情况下有效地实现所有用户的商业需求。作为性能管理过程的一部分,你需要确认什么是一个系统可接受的性能。用户可能对系统性能有着不切实际的期望,但由于硬件或其他因素的物理特性而导致的系统性能下降是无法弥补的。 准备书面性能调整文档 在开始性能调优之前,建立书面的性能调整文档是非常重要的,可以包含以下要素: 具体的可实现的目标 可接受的最低性能标准 可重复测量的度量和正常变化 操作方法 通知机制 在设计期间准备性能调整文档的时候,要会识别和避免陷阱。不要考虑某些狭隘的问题,如“我怎样减少CPU使用率?”应该问“你的商业/企业目标是什么?”有时用户很难对工作流程或工作负载进行控制。公司政策也有可能致使最好的管理计划变得毫无价值。技术培训有时是一个有效的工具,可以与用户建立合作,让他们知道为什么要遵守特定规则或限制。 当你建立调整系统文档时,最重要的事情之一就是:使用什么标准来衡量系统的性能,并将得到的基准性能数据保存起来,以便以后进行比较。在进行任何调整工作之前更好地定义度量是必需的,通过对使用程序的调整寻找简单的可被测量的度量或已经被报道的度量。有时越简单的度量,越有可能发现有用的东西。度量也应该是相关的。例如,如果你的度量是“总共CPU时间”,并且目标是减少一个应用程序使用CPU的总时间,你可能为了达到目标使用一个较慢的存储子系统,但是这不是一个能够让终端用户满意的方案。 询问客户,通过描述商业层的目标,可以帮助你找出测量特定应用的性能所需要使用的适当的度量。一旦选定了要使用的度量,要明确地确定度量单位以避免混乱。当获得这些度量的基线值时要考虑以下问题: 在系统测试过程中度量值是什么? 应用程序运行期间度量值是什么? 什么是度量的正常变化? 本书的结构 为了帮助Linux新手和Linux运维人员对性能调优有深入的了解并能很快上手,本书通过以下结构组织内容。 第1章,“深入理解Linux操作系统” 本章介绍了影响系统性能的因素和Linux操作系统管理系统资源的方式。还介绍了系统中需要量化的几个重要性能指标。 第2章,“监控工具” 本章涵盖了系统最常用的调优监控工具。介绍了可用于Linux测量和分析系统性能的各种工具。 第3章,“Benchmark工具” 本章详细介绍了当前企业中使用的主流工具Benchmark。 第4章,“分析性能瓶颈” 本章介绍了在系统中识别和分析瓶颈的过程。 第5章,“调整操作系统” 本章介绍了操作系统的基本知识及如何使用性能衡量工具,以及如何对系统4大子系统进行调整,使系统以最优状态应对不同的工作环境。
目 录 第1章 深入理解Linux操作系统 1 1.1 Linux进程管理 1 1.1.1 什么是进程 2 1.1.2 进程的生命周期 2 1.1.3 线程 3 1.1.4 进程优先级和nice等级 4 1.1.5 上下文切换 4 1.1.6 中断处理 5 1.1.7 进程状态 5 1.1.8 进程的内存段 6 1.1.9 Linux CPU调度程序 7 1.2 Linux内存体系结构 8 1.2.1 物理内存和虚拟内存 8 1.2.2 虚拟内存管理 10 1.3 Linux文件系统 12 1.3.1 虚拟文件系统 12 1.3.2 文件系统日志 13 1.3.3 Ext2 13 1.3.4 Ext3 15 1.3.5 Ext4 15 1.3.6 XFS 18 1.3.7 Btrfs 19 1.3.8 JFS 20 1.3.9 ReiserFS 20 1.4 Linux 磁盘 I/O 子系统 20 1.4.1 I/O子系统的体系结构 20 1.4.2 Cache 20 1.4.3 块层 23 1.4.4 I/O 设备驱动程序 25 1.4.5 RAID与文件系统 26 1.5 Linux 网络子系统 26 1.5.1 网络化的实现 26 1.5.2 TCP/IP 30 1.5.3 Offload 32 1.5.4 Bonding模块 32 1.6 了解Linux性能度量标准 32 1.6.1 处理器度量标准 32 1.6.2 内存度量标准 33 1.6.3 块设备度量标准 34 1.6.4 网络接口度量标准 34 第2章 监控工具 35 2.1 介绍 35 2.2 工具功能概述 35 2.3 监控工具 36 2.3.1 top 36 2.3.2 uptime 38 2.3.3 ps、pstree 38 2.3.4 free 43 2.3.5 mpstat 44 2.3.6 vmstat 46 2.3.7 iostat 50 2.3.8 netstat、ss 53 2.3.9 sar 58 2.3.10 numastat 70 2.3.11 pmap 72 2.3.12 iptraf 73 2.3.13 tcpdump和wireshark 76 2.3.14 strace和ltrace 92 2.3.15 gnuplot 97 2.3.16 Gnome System Monitor 106 2.3.17 KDE System Guard 114 第3章 Benchmark工具 123 3.1 CPU2006 124 3.1.1 安装与运行 126 3.1.2 runspec命令 130 3.1.3 配置文件 139 3.2 STREAM 167 3.2.1 什么是STREAM 167 3.3 Bonnie++ 172 3.4 Netperf 177 3.4.1 Netperf介绍 177 3.4.2 Netperf设计 178 3.4.3 CPU使用率 179 3.4.4 全局命令行选项 181 3.4.5 使用Netperf测量“批量数据”传输 186 3.4.6 使用Netperf测量“请求/响应” 192 3.4.7 使用netperf来测试总体性能 196 3.4.8 使用netperf测量双向传输 201 3.4.9 omni测试 203 3.4.10 其他的nerperf测试 206 第4章 分析性能瓶颈 208 4.1 识别系统瓶颈 208 4.1.1 收集信息 208 4.1.2 分析服务器性能 210 4.2 CPU瓶颈 210 4.2.1 查找CPU瓶颈 211 4.2.2 SMP 211 4.2.3 性能调整选项 211 4.3 内存瓶颈 212 4.3.1 查找内存瓶颈 212 4.3.2 性能调整选项 213 4.4 磁盘瓶颈 214 4.4.1 查找磁盘瓶颈 214 4.4.2 性能调整选项 216 4.5 网络瓶颈 216 4.5.1 查找网络瓶颈 216 4.5.2 性能调整选项 217 第5章 调整操作系统 218 5.1 调整原则 218 5.1.1 变更管理 219 5.2 安装注意事项 219 5.2.1 安装 219 5.2.2 检查当前的配置 220 5.2.3 最小化资源使用 227 5.2.4 SELinux 231 5.2.5 编译内核 232 5.3 更改内核参数 233 5.3.1 proc文件系统 233 5.3.2 存储参数的位置 235 5.3.3 使用sysctl命令 235 5.4 调整处理器子系统 235 5.4.1 调整进程优先级 236 5.4.2 CPU亲和力 237 5.4.3 平衡中断 240 5.4.4 NUMA系统 240 5.5 调整内存子系统 243 5.5.1 内存回收(设置内核交换和刷新脏数据行为) 243 5.5.2 调整swap 245 5.5.3 HugeTLBfs 247 5.5.4 内存同页合并 250 5.6 调整磁盘子系统 252 5.6.1 安装Linux前的硬件注意事项 252 5.6.2 I/O调度的调整和选择 254 5.6.3 文件系统的选择和调整 258 5.6.4 虚拟化存储 261 5.7 调整网络子系统 263 5.7.1 网卡绑定 263 5.7.2 巨帧 265 5.7.3 速度与双工模式 266 5.7.4 增加网络缓冲区 268 5.7.5 增加数据包队列 270 5.7.6 增加传输队列长度 270 5.7.7 配置offload 271 5.7.8 Netfilter 对性能的影响 272 5.7.9 流量特性的注意事项 275 5.7.10 额外的TCP/IP调整 276 5.8 限制资源使用 278