首页>参考读物>计算机科学与技术>计算机科学理论与基础知识

Linux性能优化
作者 : [美] 菲利普 G.伊佐特 (Phillip G.Ezolt) 著
出版日期 : 2017-04-28
ISBN : 978-7-111-56017-3
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 236
开本 : 16
原书名 : Optimizing Linux Performance: A Hands-On Guide to Linux Performance Tools
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

随着应用性能日益重要,今天复杂的生产环境,Linux在这个方面有着突出的优势,完全开放的源代码,完善的优化工具。但是这些工具分散在互联网上,很多甚至没有专门的文档介绍,因此很多人并不知道如何使用这些工具来解决实际问题。本书介绍了目前最重要和常用的linux优化工具,以及如何应用它们来使应用的性能达到最优。本书案例众多,并重点介绍影响性能的关键部分。

图书前言

为什么性能很重要?
如果你曾经坐等计算机完成工作(同时还伴随着敲打桌面、诅咒和好奇:“啥事儿要花这么长的时间?”),你就会知道有个速度快且性能优化良好的计算机系统是多么重要。尽管不是所有的性能问题都能轻易得到解决,但是,了解系统工作缓慢的原因,就意味着有可能采用不同的解决方法:修复软件问题,升级慢速硬件,或者干脆直接把计算机扔出窗外。幸运的是,大多数操作系统,尤其是Linux,都提供了工具用于检测机器运行缓慢的原因。使用一些基础工具,就可以确定系统中哪里速度慢,并修复那些运行效率低的部分。
虽然终端用户非常讨厌速度慢的系统,但对于应用程序开发者而言,他们有着更重要的理由对其程序进行性能调优:程序能够在多个系统上高效运行。如果你编写的程序运行缓慢,又需要快速的计算机,那么你就会排除掉那些拥有慢速计算机的用户。毕竟,并非所有人都具备最新的硬件。性能良好的应用程序能被更多的用户使用,从而带来更大的潜在用户群。另外,如果潜在用户必须在两个具有相似功能的不同应用程序中进行选择,他们通常会选择运行更快或效率更高的那一个。最后,长期使用的应用程序很可能会经过几轮优化,以便适应不同的用户需求,因此,关键是了解如何追踪性能问题。
如果你是系统管理员,那么对系统用户来说,你就有责任使系统在运行时保持适当的性能水平。若系统运行缓慢,用户就会抱怨。如果你能迅速找到并解决问题,他们就会停止抱怨。还有让人高兴的是,如果你能通过调整应用程序或操作系统来解决问题(从而使他们不用购买新的硬件),那么公司的会计就会很开心。知道如何有效使用性能工具就意味着,在性能问题上需要花费的时间是有区别的:几天,还是几个小时。
Linux:优势和劣势
如果你使用Linux,维护它并用其进行开发,你就会处于一种奇特但良好的处境中。你能访问和接触的源代码、开发者和邮件列表是前所未有的,通常,这些邮件列表中会记录着多年前的设计决策。Linux是发现和修复性能问题的优良环境。与之形成鲜明对比的是专有环境,在这种环境下,很难直接接触到软件开发者,同时也很难找到大多数设计决策讨论的书面记录,而访问源代码则几乎是不可能的。除了是一个高效环境外,Linux还具备强大的性能工具,使你能发现并修复性能问题。这些工具可以与那些专门的工具相媲美。
即使有着这些令人印象深刻的优势,Linux生态环境还是需要征服一些挑战。Linux性能工具分散性很强。不同的小组根据不同的目标开发工具,其结果就是,这些工具不一定集中在一个地方。有些工具已经包含在标准的Linux发行版中,如Red Hat、SUSE和Debian;而有些工具则分散在整个互联网上。如果你尝试解决一个性能问题,首先要做的是了解你需要的工具是否存在,然后再设法找到它们。由于没有哪一个Linux性能工具能够独立解决所有类型的性能问题,因此,还必须了解如何使用多个工具来确定问题出在哪儿。这可能需要点技巧,但是经验会让它变得容易些。虽然大多数常见的方法会有文档记录,但是Linux没有任何指南来告诉你如何整合性能工具以实际解决问题。很多工具或子系统都有调整特定子系统的信息,但是却没有说明如何将它们与其他工具一起使用。许多性能问题涉及系统的多个部分,如果不知道如何同时使用多个工具,就无法解决这些问题。
本书对你有何帮助?
从本书可以学到很多东西,包括:
各种性能工具能测量什么。
怎样使用每一种工具。
如何将工具组合起来解决性能问题。
如何从性能欠佳的系统入手,查明问题。
如何利用学到的方法来解决现实世界的问题(案例研究)。
利用本书提供的方法,你可以将组织严密的问题诊断说明发送给最初的开发人员。运气好的话,他们会帮你把问题解决掉。
为什么要学习使用性能工具?
为什么要花精力去调整系统或应用程序?
性能良好的系统能用更少的资源完成更多的工作。
性能良好的应用程序能在更老旧的硬件上运行。
性能良好的桌面系统能节约用户时间。
性能良好的服务器能为更多用户提供更高质量的服务。
了解如何高效地诊断性能问题,就可以用正确的方法来解决问题,而不是盲目地采取措施并希望它能起作用。如果你是应用程序开发者,就意味着你能快速发现是哪段代码引发了问题;如果你是系统管理员,就意味着你可以找到系统的哪个部分需要调整或升级,而不用浪费时间且徒劳无功地尝试各种解决方案;如果你是终端用户,你就能发现哪些应用程序速度滞后,并将问题报告给开发者(或者必要时更新你的硬件)。
Linux现在正处于十字路口。高效系统的大部分功能已经完成,对Linux及其应用程序来说,下一步就是调优以便与其他操作系统的性能进行竞争,并超越它们。有些性能优化早已开始。例如,SAMBA、Apache和TUX Web服务器项目已经花费了大量的时间,对系统和代码进行调整和优化。其他性能优化(如能显著提升线程性能的本地POSIX线程库(NPTL),以及能改善应用程序启动时间的对象预链接)正开始被整合到Linux中。Linux提升性能的时机已然成熟。
我也能进行性能调整吗?
性能优化最大的优点是:你无须了解整个应用程序或系统的详细信息,就可以有效地修复性能问题。性能优化所需的技术与典型应用程序开发者的技术是相辅相成的。
你需要的是细心和耐心。追踪并解决性能问题与其说需要的是程序员,还不如说需要的是侦探。发现并修复这些问题令人兴奋。开始的时候,系统会很糟糕。但是,当你找到原因,并将其连根拔掉后,运气好的话,系统运行速度能达到原来的两倍。完美!
要达到完美,就必须了解强大但有时又颇令人迷惑的Linux性能工具。这需要花些功夫,但最后你会发现一切都是值得的。性能工具能向你展示超乎你预期的应用程序和系统的方方面面。
谁应该读这本书?
本书帮助Linux软件开发人员、系统管理员和终端用户利用Linux性能工具在给定系统中找出性能问题。初级性能研究员能学习性能调查和分析的基础知识。中高级性能研究员,尤其是那些已具备其他专有操作系统性能经验的,能学习那些与他们已经熟悉的系统中的命令等价的Linux命令。
软件开发人员能学习如何精确定位引发性能问题的代码行。对系统进行性能调优的系统管理员,则能学习能说明系统变慢原因的工具,然后利用这些信息调整系统。最后,终端用户(虽然不是本书的主要对象)可以学习必要的基本技术以找出哪些应用程序正在消耗系统资源。
本书是如何组织的?
本书向具备不同程度经验的读者教授如何发现并修复性能问题。为了实现这个目标,读者可以挑选本书不同的部分进行阅读,而不必直接看完整本书。
第1章介绍查找性能问题的基本方法。其中包含一系列非Linux特有的技巧和建议,它们已被证明对追踪性能问题是有用的。这些指南是性能问题查找的常用建议,可以用于追踪任何类型计算机系统的性能问题。
第2章到第8章(本书主要部分)覆盖了各种工具,可用于度量Linux系统中不同的性能统计信息。这些章解释了不同工具度量的对象以及如何调用它们,并为每个工具提供了使用示例。每一章演示的工具分别度量了Linux系统的不同部分,如系统CPU、用户CPU、内存、网络I/O以及磁盘I/O。如果一种工具涉及多个子系统,它就会出现在多个章节中。每章都会介绍多个工具,但在给定章节中,只会描述适合特定子系统的对应的工具选项。描述格式如下:
1. 概述—这部分解释了工具度量的对象及其使用方法。
2. 性能工具选项—这里不是对工具文档的老调重弹。相反,它说明了哪些选项与当前主题相关,以及这些选项的含义是什么。比如,有些性能工具手册指明了工具度量的事件,但是却没有解释这些事件的含义。本书则说明了事件含义,以及事件与当前子系统的关系。
3. 示例—这部分为度量性能统计信息的工具提供一个或多个例子,展示了调用的工具以及生成的所有输出。
第9章针对Linux,它介绍了面对低性能Linux系统时要采取的一系列步骤,以及如何正确使用之前描述的Linux性能工具来查明产生性能问题的原因。如果你想从行为异常的Linux入手,仅仅只是进行问题诊断,而不想了解工具的详情,那么这一章就是最有用的一章。
第10章到第12章为案例研究,将前面章节描述的方法和工具结合起来,解决现实世界的问题。案例研究突出了用于发现和修复各类性能问题的Linux性能工具,包括以下几类: CPU密集型应用程序,延迟敏感型应用程序,以及I/O密集型应用程序。
第13章对性能工具进行了总结,并展望了Linux性能调优工具的发展机遇。
本书有两个附录:附录A用一个表格收录了书中介绍的性能工具,给出了每一种工具最新版本的URL,并指明了每种特定的工具都由哪些Linux发行版支持;附录B说明了如何安装oprofile,该工具包含在几个主要的Linux发行版中,其功能强大,但安装困难。

上架指导

计算机\高性能计算

封底文字

在当前复杂的大规模系统场景下,卓越的应用程序性能比以往任何时候都更重要,但是获得这样的性能也更加困难。Linux由于其开源特性,已经具有一系列优秀的优化工具,只是这些工具散布在互联网上,工具的相关文档也很少,只有少数专家知道如何综合使用这些工具来解决实际问题。基于此,本书介绍了当前常用的Linux优化工具,展示了它们是如何行之有效地提升整体应用程序性能的。通过真实案例,向开发人员演示了怎样精确定位影响性能的源代码行,使系统管理人员和应用程序开发人员能够迅速深入系统瓶颈,更快地实施解决方案。
通过阅读本书,你能够:
 在不熟悉底层系统的情况下,快速识别系统瓶颈。
 针对具体问题,找到并选择正确的性能工具。
 深入理解系统性能及优化问题。
 掌握优化系统CPU、用户CPU、内存、网络I/O和磁盘I/O的方法,并了解它们之间的关系。
 掌握修复计算密集型(CPU-bound)、延迟敏感和I/O密集型(I/O-bound)的应用程序的方法,跟随案例轻松地配置自己的环境。
 安装并使用Linux系统的高级全系统分析器——oprofile。
  无论读者的技术背景如何,性能调优的新手都能通过学习本书,掌握一系列清晰实用的调优原则和策,并获得丰富的Linux知识,解决Linux系统和应用程序的调优问题,增加商业价值和提高用户满意度。

作者简介

[美] 菲利普 G.伊佐特 (Phillip G.Ezolt) 著:
菲利普 G.伊佐特(Phillip G.Ezolt)拥有近十年的Linux和UNIX系统优化经验。他花了六年的时间为康柏公司的Alpha性能小组移植并设计Linux性能工具。作为康柏公司在SPEC CPU分委会的代表,他还参与构建了SPEC CPU 2000以及后续的CPU基准测试程序。Ezolt因其向开发人员和管理人员教授Linux性能优化的专长而闻名业界。

译者序

一个运行缓慢的应用程序有时会让人抓狂,此时需要在问题诊断的基础上进行性能调整。本书将帮助你一步步地解决这个难题,告诉你如何发现并修复性能问题。
本书第1章介绍了查找性能问题的基本方法,之后用若干章分别介绍了各种工具,涉及的性能问题包括系统CPU、用户CPU、内存、网络I/O以及磁盘I/O等多个方面。在介绍各种工具时,除了介绍工具的度量对象、使用方法和相关参数选项之外,还附上了一些例子演示其用法。如果一个工具可以用于多种问题,那么将会在相关的每一章中都看到它。第10章到第12章给出了综合性的、面向实际问题的案例,有助于读者在自己解决问题时选择和使用这些工具。
本书组织结构清晰明了,读者可以根据自己的经验水平选择所需章节阅读。本书不仅能让读者学习到性能调整的各个方面,还可以作为性能工具手册使用。
在此感谢机械工业出版社华章分社的编辑朱劼和唐晓琳,感谢她们耐心细致的工作,以及在翻译过程中给予我们的支持和帮助。
在翻译中我们秉持认真细致的态度,但是由于能力所限,还是会存在错误与疏漏,希望广大读者批评指正。

贺莲 龚奕利

图书目录

译者序
前 言
致 谢
第1章 性能追踪建议 1
1.1 常用建议 2
1.1.1 记大量的笔记(记录所有的事情) 2
1.1.2 自动执行重复任务 3
1.1.3 尽可能选择低开销工具 4
1.1.4 使用多个工具来搞清楚问题 4
1.1.5 相信你的工具 5
1.1.6 利用其他人的经验(慎重) 5
1.2 性能调查概要 6
1.2.1 找到指标、基线和目标 6
1.2.2 追踪近似问题 7
1.2.3 查看问题是否早已解决 7
1.2.4 项目开始(启动调查) 8
1.2.5 记录,记录,记录 9
1.3 本章小结 9
第2章 性能工具:系统CPU 10
2.1 CPU性能统计信息 10
2.1.1 运行队列统计 10
2.1.2 上下文切换 11
2.1.3 中断 12
2.1.4 CPU使用率 12
2.2 Linux性能工具:CPU 12
2.2.1 vmstat(虚拟内存统计) 13
2.2.2 top(2.0.x版本) 16
2.2.3 top(3.x.x版本) 20
2.2.4 procinfo(从/proc文件系统显示信息) 24
2.2.5 gnome-system-monitor 26
2.2.6 mpstat(多处理器统计) 27
2.2.7 sar(系统活动报告) 29
2.2.8 oprofile 33
2.3 本章小结 39
第3章 性能工具:系统内存 40
3.1 内存性能统计信息 40
3.1.1 内存子系统和性能 40
3.1.2 内存子系统(虚拟存储器) 40
3.2 Linux性能工具:CPU与内存 42
3.2.1 vmstat(II) 43
3.2.2 top(2.x和3.x) 47
3.2.3 procinfo(II) 49
3.2.4 gnome-system-monitor(II) 51
3.2.5 free 52
3.2.6 slabtop 54
3.2.7 sar(II) 55
3.2.8 / proc / meminfo 58
3.3 本章小结 60
第4章 性能工具:特定进程CPU 61
4.1 进程性能统计信息 61
4.1.1 内核时间vs.用户时间 61
4.1.2 库时间vs.应用程序时间 62
4.1.3 细分应用程序时间 62
4.2 工具 62
4.2.1 time 62
4.2.2 strace 65
4.2.3 ltrace 67
4.2.4 ps(进程状态) 70
4.2.5 ld.so(动态加载器) 72
4.2.6 gprof 74
4.2.7 oprofile(II) 77
4.2.8 语言:静态(C和C++)vs.动态(Java和Mono) 82
4.3 本章小结 82
第5章 性能工具:特定进程内存 83
5.1 Linux内存子系统 83
5.2 内存性能工具 84
5.2.1 ps(II) 84
5.2.2 /proc/ 85
5.2.3 memprof 88
5.2.4 valgrind(cachegrind) 90
5.2.5 kcachegrind 95
5.2.6 oprofile(III) 99
5.2.7 ipcs 103
5.2.8 动态语言(Java和Mono) 107
5.3 本章小结 107
第6章 性能工具:磁盘I/O 108
6.1 磁盘I/O介绍 108
6.2 磁盘I/O性能工具 109
6.2.1 vmstat(III) 109
6.2.2 iostat 113
6.2.3 sar(III) 115
6.2.4 lsof(列出打开文件) 117
6.3 缺什么 119
6.4 本章小结 119
第7章 性能工具:网络 120
7.1 网络I/O介绍 120
7.1.1 链路层的网络流量 121
7.1.2 协议层网络流量 122
7.2 网络性能工具 122
7.2.1 mii-tool(媒体无关接口工具) 123
7.2.2 ethtool 123
7.2.3 ifconfig(接口配置) 124
7.2.4 ip 126
7.2.5 sar(IV) 127
7.2.6 gkrellm 129
7.2.7 iptraf 131
7.2.8 netstat 132
7.2.9 etherape 134
7.3 本章小结 136
第8章 实用工具:性能工具助手 137
8.1 性能工具助手 137
8.1.1 自动执行和记录命令 138
8.1.2 性能统计信息的绘图与分析 138
8.1.3 调查应用程序使用的库 138
8.1.4 创建和调试应用程序 138
8.2 工具 139
8.2.1 bash 139
8.2.2 tee 140
8.2.3 script 141
8.2.4 watch 142
8.2.5 gnumeric 144
8.2.6 ldd 146
8.2.7 objdump 146
8.2.8 GNU调试器(gdb) 147
8.2.9 gcc(GNU编译器套件) 149
8.3 本章小结 152
第9章 使用性能工具发现问题 153
9.1 并非总是万灵药 153
9.2 开始追踪 153
9.3 优化应用程序 154
9.3.1 内存使用有问题? 154
9.3.2 启动时间有问题? 154
9.3.3 加载器引入延迟了吗? 154
9.3.4 CPU使用(或完成时长)有问题? 155
9.3.5 应用程序的磁盘使用有问题? 155
9.3.6 应用程序的网络使用有问题? 155
9.4 优化系统 155
9.4.1 系统是受CPU限制的吗? 156
9.4.2 单个进程是受CPU限制的吗? 157
9.4.3 一个或多个进程使用了大多数的系统CPU吗? 157
9.4.4 一个或多个进程使用了单个CPU的大多数时间? 157
9.4.5 内核服务了许多中断吗? 157
9.4.6 内核的时间花在哪儿了? 158
9.4.7 交换空间的使用量在增加吗? 158
9.4.8 系统是受I/O限制的吗? 158
9.4.9 系统使用磁盘I/O吗? 158
9.4.10 系统使用网络I/O吗? 158
9.5 优化进程CPU使用情况 159
9.5.1 进程在用户还是内核空间花费了时间? 160
9.5.2 进程有哪些系统调用,完成它们花了多少时间? 160
9.5.3 进程在哪些函数上花了时间? 160
9.5.4 热点函数的调用树是怎样的? 160
9.5.5 Cache缺失与热点函数或源代码行是对应的吗? 161
9.6 优化内存使用情况 161
9.6.1 内核的内存使用量在增加吗? 161
9.6.2 内核使用的内存类型是什么? 161
9.6.3 特定进程的驻留集大小在增加吗? 162
9.6.4 共享内存的使用量增加了吗? 163
9.6.5 哪些进程使用了共享内存? 163
9.6.6 进程使用的内存类型是什么? 163
9.6.7 哪些函数正在使用全部的栈? 163
9.6.8 哪些函数的文本大小最大? 163
9.6.9 进程使用的库有多大? 164
9.6.10 哪些函数分配堆内存? 164
9.7 优化磁盘I/O使用情况 164
9.7.1 系统强调特定磁盘吗? 165
9.7.2 哪个应用程序访问了磁盘? 165
9.7.3 应用程序访问了哪些文件? 165
9.8 优化网络I/O使用情况 165
9.8.1 网络设备发送/接收量接近理论极限了吗? 166
9.8.2 网络设备产生了大量错误吗? 167
9.8.3 设备上流量的类型是什么? 167
9.8.4 特定进程要为流量负责吗? 167
9.8.5 流量是哪个远程系统发送的? 167
9.8.6 哪个应用程序套接字要为流量负责? 167
9.9 尾声 168
9.10 本章小结 168
第10章 性能追踪1:受CPU限制的应用程序(GIMP) 169
10.1 受CPU限制的应用程序 169
10.2 确定问题 170
10.3 找到基线/设置目标 170
10.4 为性能追踪配置应用程序 171
10.5 安装和配置性能工具 172
10.6 运行应用程序和性能工具 172
10.7 分析结果 173
10.8 转战网络 177
10.9 增加图像缓存 179
10.10 遇到(分片引发的)制约 179
10.11 解决问题 180
10.12 验证正确性 181
10.13 后续步骤 181
10.14 本章小结 182
第11章 性能追踪2:延迟敏感的应用程序(nautilus) 183
11.1 延迟敏感的应用程序 183
11.2 确定问题 184
11.3 找到基线/设置目标 184
11.4 为性能追踪配置应用程序 186
11.5 安装和配置性能工具 186
11.6 运行应用程序和性能工具 187
11.7 编译和检查源代码 191
11.8 使用gdb生成调用跟踪 193
11.9 找到时间差异 197
11.10 尝试一种可能的解决方案 197
11.11 本章小结 199
第12章 性能追踪3:系统级迟缓(prelink) 200
12.1 调查系统级迟缓 200
12.2 确定问题 200
12.3 找到基线/设置目标 201
12.4 为性能追踪配置应用程序 204
12.5 安装和配置性能工具 204
12.6 运行应用程序和性能工具 205
12.7 模拟解决方案 209
12.8 报告问题 212
12.9 测试解决方案 214
12.10 本章小结 215
第13章 性能工具:下一步是什么 216
13.1 Linux工具的现状 216
13.2 Linux还需要什么样的工具 216
13.2.1 漏洞1:性能统计信息分散 217
13.2.2 漏洞2:没有可靠并完整的调用树 217
13.2.3 漏洞3:I/O的归因 218
13.3 Linux的性能调优 218
13.3.1 可用的源代码 218
13.3.2 容易联系开发者 218
13.3.3 Linux还年轻 219
13.4 本章小结 219
附录A 性能工具的位置 220
附录B 安装oprofile 222

教学资源推荐
作者: 周杰英 张萍 张曼娜 郭雪梅 黄方军 等
作者: (英)George Coulouris  Jean Dollimore  Tim Kindberg  Gordon Blair 著
作者: 刘春燕、吴黎兵、黄华
参考读物推荐
作者: [美]伊戈尔·卢布希斯(Igor Ljubuncic) 著
作者: 杨剑 张璞 陈火红
作者: 卞诚君 等编著
作者: 恒盛杰资讯 编著