1.2 Linux 性能调优概览
为了调试和追踪程序的运行过程,Linux 提供了众多的分析工具,本节我们先对它们做一个宏观概览。

1. 我们到底要优化什么
在我们了解接下来的各种工具之前,我们首先应该问自己,我们要追踪或者说我们要优化什么。我们都知道程序的运行会占用包括 CPU,内存,文件描述符,锁,磁盘,网络等等在内的各种操作系统资源。根据2/8定律,当其中的某一个或多个资源出现瓶颈的时候,我们需要找到程序中耗费资源最大的地方,并对其优化。
为了调试和追踪程序的运行过程,Linux 提供了众多的分析工具,本节我们先对它们做一个宏观概览。

在我们了解接下来的各种工具之前,我们首先应该问自己,我们要追踪或者说我们要优化什么。我们都知道程序的运行会占用包括 CPU,内存,文件描述符,锁,磁盘,网络等等在内的各种操作系统资源。根据2/8定律,当其中的某一个或多个资源出现瓶颈的时候,我们需要找到程序中耗费资源最大的地方,并对其优化。
这个系列文章,目的是学习一下 Linux 的性能优化,希望下一次服务器出问题时,不是只会一个 top。Linux 性能优化与 Linux 操作系统密切相关,所以想要学好非常不容易。
最小生成树
所谓最小生成树(简称MST)就是在一个无向,有权图G中,找到一颗连接所有顶点的树,并且树包含的边的权重总和最低。最小生成树有两种常见解法:
最短路经
广度优先算法可以计算连通图中,从一个顶点到另一顶点的最短路径,但前提是图上的每条边的权重相同。那如何计算全重不同的图的最短路径呢?最出名的莫过于 Dijkstra 算法。
拓扑排序
拓扑排序是一种排序,假设完成一项任务需要 n 个步骤,这 n 个步骤之间存在依赖关系,拓扑排序就是确定一个满足依赖关系的执行步骤。典型的拓扑排序用于解决如下问题:
解决图可达性的传递闭包
通过图上的深度和广度优先搜索算法,我们可以知道顶点 u 到顶点 v 的可达性问题,但是在某些应用中,我们可能希望更高校的回答很多可达性问题。此时对图预计算一个更高效的表示方式是非常值得的,图的传递闭包就是用来解决这个问题。