上一节,我带你一块儿梳理了,性能问题分析的通常步骤。先带你简单回顾一下。算法
咱们能够从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源。数据库
从系统资源瓶颈的角度来讲,USE 法是最为有效的方法,即从使用率、饱和度以及错误数这三个方面,来分析 CPU、内存、磁盘和文件系统 I/O、网络以及内核资源限制等各种软硬件资源。至
于这些资源的分析方法,我也带你一块儿回顾了,我们专栏前面几大模块的分析套路。缓存
从应用程序瓶颈的角度来讲,能够把性能问题的来源,分为资源瓶颈、依赖服务瓶颈以及应用自身的瓶颈这三类。性能优化
固然,虽然系统和应用是两个不一样的角度,但在实际运行时,它们每每相辅相成、相互影响。服务器
咱们作性能分析,就是要结合应用程序和操做系统的原理,揪出引起问题的“真凶“。网络
找到性能问题的来源后,整个优化工做其实也就完成了一大半,由于这些瓶颈为咱们指明了优化的方向。不过,对于性能优化来讲,又有哪些常见的方法呢?数据结构
今天,我就带你一块儿来看看,性能优化的通常方法。同上一节的性能分析同样,咱们也能够从系统和应用程序,这两个不一样的角度来进行性能优化。多线程
首先来看系统的优化。在上一节,我曾经介绍过,USE 法能够用来分析系统软硬件资源的瓶颈,那么,相对应的优化方法,固然也是从这些资源瓶颈入手。架构
实际上,我们专栏的前四个模块,除了最核心的系统资源瓶颈分析以外,也已经包含了这些常见资源瓶颈的优化方法。并发
接下来,我就从 CPU 性能、内存性能、磁盘和文件系统 I/O 性能以及网络性能等四个方面,带你回顾一下它们的优化方法。
首先来看 CPU 性能的优化方法。在CPU 性能优化的几个思路中,我曾经介绍过, CPU 性能优化的核心,在于排除全部没必要要的工做、充分利用 CPU 缓存并减小进程调度对性能的影响。
从这几个方面出发,我相信你已经想到了不少的优化方法。这里,我主要强调一下,最典型的三种优化方法。
说完了 CPU 的性能优化,咱们再来看看,怎么优化内存的性能。在如何“快准狠”找到系统内存的问题中,我曾经为你梳理了常见的一些内存问题,好比可用内存不足、内存泄漏、Swap 过
多、缺页异常过多以及缓存过多等等。因此,说白了,内存性能的优化,也就是要解决这些内存使用的问题。
在我看来,你能够经过如下几种方法,来优化内存的性能。
接下来,咱们再来看第三类系统资源,即磁盘和文件系统 I/O 的优化方法。在磁盘 I/O 性能优化的几个思路 中,我已经为你梳理了一些常见的优化思路,这其中有三种最典型的方法。
除此以外,使用不一样磁盘隔离不一样应用的数据、优化文件系统的配置选项、优化磁盘预读、增大磁盘队列长度等,也都是经常使用的优化思路。
最后一个是网络的性能优化。在网络性能优化的几个思路中,我也已经为你梳理了一些常见的优化思路。这些优化方法都是从 Linux 的网络协议栈出发,针对每一个协议层的工做原理进行优化。
这里,我一样强调一下,最典型的几种网络优化方法。
这些都是内核选项优化的最多见措施。
说完了系统软硬件资源的优化,接下来,咱们再来看看应用程序的优化思路。
虽然系统的软硬件资源,是保证应用程序正常运行的基础,但你要知道, 性能优化的最佳位置,仍是应用程序内部。为何这么说呢?我简单举两个例子你就明白了。
第一个例子,是系统 CPU 使用率(sys%)太高的问题。有时候出现问题,虽然表面现象是系统CPU 使用率太高,但待你分析事后,极可能会发现,应用程序的不合理系统调用才是罪魁祸首。
这种状况下,优化应用程序内部系统调用的逻辑,显然要比优化内核要简单也有用得多。
再好比说,数据库的 CPU 使用率高、I/O 响应慢,也是最多见的一种性能问题。这种问题,通常来讲,并非由于数据库自己性能很差,而是应用程序不合理的表结构或者 SQL 查询语句致使
的。这时候,优化应用程序中数据库表结构的逻辑或者 SQL 语句,显然要比优化数据库自己,能带来更大的收益。
因此,在观察性能指标时,你应该先查看 应用程序的响应时间、吞吐量以及错误率等指标,由于它们才是性能优化要解决的终极问题。以终为始,从这些角度出发,你必定能想到不少优化方
法,而我比较推荐下面几种方法。
除此以外,你还可使用消息队列、CDN、负载均衡等各类方法,来优化应用程序的架构,将原来单机要承担的任务,调度到多台服务器中并行处理。这样也每每能得到更好的总体性能。
今天,我带你一块儿,从系统和应用程序这两个角度,梳理了常见的性能优化方法。
从系统的角度来讲,CPU、内存、磁盘和文件系统 I/O、网络以及内核数据结构等各种软硬件资源,为应用程序提供了运行的环境,也是咱们性能优化的重点对象。你能够参考我们专栏前面四
个模块的优化篇,优化这些资源。
从应用程序的角度来讲,下降 CPU 使用,减小数据访问和网络 I/O,使用缓存、异步处理以及多进程多线程等,都是经常使用的性能优化方法。除了这些单机优化方法,调整应用程序的架构,或是
利用水平扩展,将任务调度到多台服务器中并行处理,也是经常使用的优化思路。
虽然性能优化的方法不少,不过,我仍是那句话,必定要避免过早优化。性能优化每每会提升复杂性,这一方面下降了可维护性,另外一方面也为适应复杂多变的新需求带来障碍。
因此,性能优化最好是逐步完善,动态进行;不追求一步到位,而要首先保证,能知足当前的性能要求。发现性能不知足要求或者出现性能瓶颈后,再根据性能分析的结果,选择最重要的性能问题进行优化。