做网站页面对PS切图,做盗版小说网站 风险,sql数据库环境网站搭建教程,百度app智能小程序13.0 概述
本章是对一些事情的思索#xff0c;包括#xff1a;Linux性能工具的当前状态#xff0c;哪些仍需要改进以及为什么Linux是当前一个相当不错的进行性能调查的平台。 阅读本章后#xff0c;你将能够#xff1a;
了解Linux性能工具箱的漏洞#xff0c;以及一些理…13.0 概述
本章是对一些事情的思索包括Linux性能工具的当前状态哪些仍需要改进以及为什么Linux是当前一个相当不错的进行性能调查的平台。 阅读本章后你将能够
了解Linux性能工具箱的漏洞以及一些理想的解决方案。了解Linux作为性能调查平台的优势。
13.1Linux工具的现状
本书介绍了目前的Linux性能工具以及怎样单独和一起使用它们来解决性能问题。就Linux的各方面而言这些性能工具一直在发展因此进行问题调查时不断查看性能工具的帮助页或文档以确定其用法是否发生变化是一个好习惯。性能工具的基本功能很少改变但常常会增加一些新功能因此对特定工具查看其最新发布的说明和文档是很有帮助的。
13.2Linux还需要什么样的工具
当我们了解一些Linux性能工具时我们看到了整体性能调查功能中的一些漏洞。有些漏洞是由于内核限制造成的有些漏洞则仅仅是由于没人编写一个工具来解决这个问题。但是填补这些漏洞会让调查和修复Linux性能问题变得容易得多。
13.2.1漏洞1:性能统计信息分散
一个明显的漏洞是Linux没有一个单一的工具为特定进程提供所有的相关性能统计信息。在原来的UNIX中ps可以填补这一漏洞在Linux中它也很不错但却不包含其他商业UNIX实现提供的全部统计信息。有些统计信息对追踪性能问题是非常有价值的比如inblk(读入的I/O块)和oublk(写出的I/O块),它们表示的是一个进程使用的磁盘I/O量vcsw(自愿的上下文切换)和invcsw(非自愿的上下文切换),它们通常表示一个进程进行CPU上下文切换msgrcv(从通道和套接字接收的消息)和msgsnd(从通道和套接字发送的消息),它们显示的是一个应用程序使用的网络和通道I/O量。一个理想工具应加上所有这些统计数据并将迄今为止提到的许多性能工具(包括oprofile、top、ps、strace、Itrace 和/proc文件系统)的功能组合到一个单一的应用程序中。用户应能在进程上使用这个单一的应用程序抽取所有重要的性能统计数据。每个统计数据都能实时更新使得用户可以在运行时调试应用程序。它会将某个调查方面的信息分组统计到相同位置。 举个例子如果我正在调查内存使用情况它就应该显示到底堆、栈、库、共享内存以及mmap使用了多少内存。假如某个特定内存区域大大超过了我的预期我可以继续深入调查而这个性能工具可以告诉我究竟是哪些函数分配了这些内存。如果我正在调查CPU的使用情况我会从总体统计数据开始诸如系统时间和用户时间各是多少某个特定进程有多少个系统调用之后我将能够更加深入到系统时间或者是用户时间看看到底是哪些函数消耗了这些时间以及它们被调用的频率。一个高明的shell脚本利用合适的已存在的工具来收集并整合信息多花些时间也能实现其中的部分功能但要完全实现这一愿望就有必要让一些工具的行为发生根本性的变化。
13.2.2漏洞2:没有可靠并完整的调用树
接下来的性能工具漏洞是目前还没有办法提供应用程序执行的完整的调用树。Linux有几个不完整的实现。oprofile提供了调用树的生成但它是基于采样的因此无法捕捉生成的每一个调用。gprof支持调用树但它无法分析整个应用程序除非是特定进程调用的每一个库编译时选择支持分析。最有前途的工具valgrind有一个界面称为calltree,详述参见5.2.5节它的目标是提供一个完全准确的调用树。但是它还在发展中且无法适用于所有的二进制文件。 调用树工具是很有用的即便是当它运行时会明显降低应用程序的性能。常见的使用方法是先运行oprofile找出应用程序中的哪些函数是“热点”,然后运行调用树程序明确为什么应用程序要调用它们。oprofile那一步将提供全速运行时应用程序瓶颈的准确视图而调用树即使它运行缓慢也会显示应用程序是如何调用那些函数以及调用的原因。唯一的问题是如果程序的行为是时间敏感的运行缓慢将会导致其行为发生变化(比如那些依赖于网络或磁盘I/O的)。不过现有的许多问题不是时间敏感的用准确的调用树机制修复它们还有很长的路要走。
13.2.3漏洞3:IO的归因
最后当前Linux中最大的漏洞是I/O归因。现在Linux没有提供好的方法来追踪哪些应用程序使用了最多的磁盘或者甚至是网络I/O。 一个理想的工具应实时显示特定进程使用的磁盘或网络I/O的输入输出字节数。该工具将显示统计数据如原始带宽以及子系统能够占用的原始I/O百分比。此外用户还要能分解统计数据以便他们可以看到每一个单独网络和磁盘设备都相同的统计信息。
13.3 Linux的性能调优
即使存在上述漏洞Linux仍然是一个发现并修复性能问题的理想环境。它是由开发人员编写给开发人员的其结果就是它对性能调查者非常友好。Linux有几个特点使它成为追踪性能问题的优秀平台。
13.3.1 可用的源代码
首先开发人员可以访问到整个系统的大多数(如果不是全部)的源代码。如果问题看上去不在你的代码中那么在追踪问题时这一点就相当有价值。对商用UNIX或其他无法获得源代码的操作系统你可能需要等待供应商对问题进行调查如果的确是他的问题你也无法保证他会修复问题。但是对Linux而言你可以自己调查问题弄清楚为什么性能问题会发生。如果问题不在你的应用程序中你可以修复它并提交补丁或是直接运行一个已修复的版本。如果在阅读Linux源代码后你意识到是你的应用程序有问题那么你也可以修复问题。不管是哪种情况你都可以立即进行修复不会因等待别人而卡壳。
13.3.2 容易联系开发者
Linux的第二个优点是找到并联系特定应用程序或库的开发人员相对容易。大多数其他专有操作系统很难说清楚哪个工程师负责哪个代码片段相比之下Linux要更加开放。通常特定软件片段开发人员的名字和联系方式都放在软件包中。访问开发人员使你可以咨询一些问题包括特定代码段的行为运行缓慢的代码是干什么用的以及给定的优化执行起来是否安全。开发人员一般会很乐意就此提供帮助。
13.3.3 Linux还年轻
Linux是性能优化的优秀平台的最后一个理由是它还未成熟功能仍在开发中Linux 还有很多机会发现并修复简单的性能缺陷。大多数开发人员关注于添加功能因此性能问题会被搁置一边不去解决。一个雄心勃勃的性能调查人员可以在不断开发的Linux中发现并修复很多小的性能问题。这些小修复超越了单个个体惠及整个Linux团体。
13.4本章小结
本章我们研究了Linux性能工具几个集中存在缺点的方面并提出了一些理想的解决方案。我们还讨论了为什么Linux是一个尝试进行性能调查和优化的好平台。 改变Linux获得更好的性能这取决于你——读者。提升Linux性能改进Linux性能工具的机会比比皆是。如果你发现了困扰你的性能问题修复它或者向开发人员报告和他们一起修复它。无论哪种方式都不会再有人被这个问题卡住整个Linux团体都会受益。