性能之巅:洞悉系统、企业与云计算
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

推荐序3

人类正在用软件重构这个世界。从上世纪四十年代电子计算机出现,到个人电脑风靡、互联网大行其道,再到如今正兴旺的云计算加移动互联网,还有起步中的物联网,所有这些表面上看是计算机硬件变得无处不在,而实质上是软件一步步掌管起了这个世界。噫吁嚱,短短七十几年,软件轻松征服世界!渗透渗透再渗透,已经进入所有人的生活。

不言而喻,软件对这个世界和人类的重要性也越来越大。我很负责任地说,软件的健康与否关系着世界的安危。君不见,几多时,一个软件漏洞便让全球惊慌。不经意间,我们与软件的关系变得休戚与共。

不幸的是,软件的总体健康状况并不乐观,问题很多。

瑕疵(Bug)是软件行业的一个永恒话题,是破坏软件质量的头号大敌。但迄今为止,完全发现和彻底消除瑕疵还只是奢望,是不可能实现的目标。换句话来说,掌管着我们生活的所有软件都是在带着瑕疵运行,真正的带“病”工作。因为每个软件内部都有纵横交错的无数条道路,CPU 经常奔跑的那些路径上的瑕疵早被发现和移除,所以软件大多时候并不发“病”。但也有时候,CPU 会遭遇软件中的瑕疵,发生意外。目前,我们能做的只有努力多发现瑕疵,并尽可能找到根源,将其去除。但这并不是件容易的事情。

除了瑕疵,性能问题是威胁软件健康的另一个大敌。简单来说,我们把软件中的错误归入瑕疵一类。把那些在速度、资源消耗、工作量等方面的不满意表现纳入性能问题一类。用员工考核做比喻,瑕疵是把一件事做错了,而性能问题是虽然做对了,但是做得不够好,可能开销太大,用的资源太多,可能完成速度太慢,用的时间太久,可能完成的工作量太少,活干的不够多,总之是结果不令人满意,还有必要改进。

举例来说,某支付软件在性能方面就存在问题。一旦运行,会频繁触发大量的缺页异常,消耗的CPU 时间过多,导致不必要的能源浪费。随着软件变得无处不在,软件的耗电问题已经引起越来越多的关注。在笔者写作这几行文字时,该软件的几个进程仍在一刻不停地触发着缺页异常,过去两天的累积数量已经超过千万,消耗CPU 的净时间已经超过一小时。粗略估计,这几个进程至少已经消耗了0.01 度电。不要忽视0.01 这个看似微小的数字,把它乘以全国的总用户数,立刻就变成一个庞大的数字了。

与软件瑕疵类似,性能问题也可能危害巨大!更可怕的是,性能方面的问题容易触发隐藏在软件深处的瑕疵,直接导致软件崩溃或者其他无法预计的故障。

发现瑕疵根源的过程一般称为调试(Debug)。纠正性能问题,提高软件性能的努力被称为调优(Tune)。不论调试,还是调优,都不是简单的事。对软件工程师的技术要求很高。一些复杂的问题,常常需要多方面的知识,需要对系统有全面了解,既有大局观,能俯瞰全局,又能探微索隐,深入到关键的细节,可谓是 “致广大而尽精微”。

如果一定要把调试和调优的难度比一下,调优的难度更大。简单的解释是,调试的主要目标是寻找瑕疵,瑕疵固定存在软件中的某一个点。因此,调试时可以通过断点等技术把软件静止下来,慢慢分析。而调优必须关注一个动态的过程,观察一段时间内的软件行为。这样一来,调优时常常不可以把软件中断下来静止分析,而需要以统计学的方法或者其他技术对软件做长时间监视。

记得两年前,曾经有一个同行以饱经沧桑的神情问我:“在中国这样的软件环境里,做技术的工程师应该如何发展呢?难道都得像你那样写一本书么?”坦率地说,我当时没能给出让这位同行很满意的回答。因为这个问题确实不太容易回答。此事之后,我常常想起这个困扰着很多同行的问题。多次思考后,我似乎有了个比较好的答案。首先要确认自己是喜欢软件技术的,愿意在技术方向上持续发展。接下来的问题是如何在技术方向上不断前进。“日日新,又日新”。我的建议是,逐级攀登软件技术的三级台阶:编码、调试和调优。

代码是软件的根本,一个好的软件工程师必须过代码这一关,写代码时如行云流水,读代码时穿梭自如,如履平川。以调试器为核心的调试技术是对抗软件瑕疵的最有力工具,是每个技术同行都应该佩戴的一把利剑。调优技术旨在发现软件的性能障碍,让软件跑得更好。随着对软件性能问题的重视,调优技术的发展也越来越快,新的工具层出不穷。调优方面的工作和创业机会也在不断增加。几年前,我写作《软件调试》时,很多人还不太重视调试,但最近几年,软件调试已经逐渐从藏在背后的隐学逐步走向前台,成为一门显学。可以预见,性能调优也会受到越来越多的重视。大家加油!

学习调优技术有很多挑战,很高兴看到有这样一本关于系统优化的好书引进到国内。好友侠少诚邀作序,盛情难却,仓促命笔,词不达意,请诸君海涵,是为序。

——张银奎 资深调试专家,《软件调试》和《格蠹汇编》作者 2015年7月22日于上海格蠹轩