也许是想要支持更高的吞吐量,想要更小的延迟,或者提高资源的利用率等,这些都是性能优化的目标之一。不过需要提醒的是,不要过早的进行性能优化。如果当前并没有任何性能问题,又何必耗费这个精力呢?当前一些有助于提高性能的编码习惯还是可以时刻保持的。
目标
全面的性能优化不是一件简单的事情。本系列文章不在于介绍性能优化原理或者特定的算法优化。旨在分享一些实践中常用到的技巧,同时也主要关注CPU方面。
如何发现性能瓶颈
解决性能问题的第一步是发现性能问题。如何快速发现性能问题呢?对于本文来说,如何发现那些使CPU不停地瞎忙的代码呢?为什么这里是说让CPU瞎忙的代码?
举个例子,完成某个事情,你可能只需要一个CPU时间片,但是由于代码不够好,使得仍然需要多个CPU时间片。导致CPU非常忙碌,而无法继续提高它的效率。
top
这个命令相信大家都用过,可以实时看到进程的一些状态。它的使用方法有很多文章不厌其烦地对其进行了介绍,本文不打算进行介绍。我们可以通过top命令看到某个进程占用的CPU,但是CPU占用高并不代表它有性能问题,也有可能是CPU正在有效地高速运转,并没有占着茅坑不拉屎。
快速发现
想必我们都听过八二法则,同样的,80%的性能问题集中于20%的代码。因此我们只要找到这20%的部分代码,就可以有效地解决一些性能问题。
本文使用perf命令,它很强大,支持的参数也非常多,不过没关系,本文也没打算全部介绍。
系统中可能没有perf命令,ubuntu可以使用如下方法安装:
sudo apt install linux-tools-common
实例
直接来看示例吧。例子很简单,只是将字符串的字母转为大写罢了。当然了,很多人可能一眼就看出了哪里有性能问题,不过没关系,这个例子只是为了说明perf的应用。