应用系统性能优化之道

1,126 阅读5分钟

作为一名性能测试工程师,在测试过程中,系统出现一些诡异的问题很常见。有时候系统突然间CPU、内存占满,有时候系统请求大量不可用,有时候直接登录不上,有时候请求超时等等...这些问题的背后有着复杂而又让人头疼的原因,很多时候测试人员遇到此类问题往往是直接甩给开发或者重启应用看运气,测试人员之所以这样做的根本原因是**系统性能问题太过复杂,无法通过简单的操作使性能问题快速得到解决,而网络上也不会有一套操作指南告诉你如何去应对日益复杂的性能问题,它需要你有这全栈的软硬件知识。**本文从一个较为宏观的视角浅谈一下个人对应用系统性能调优的认识。

一、性能优化流程

一个系统在上线前夕,一般都会对系统的承压情况进行摸排,以尽可能提升系统上线后的稳定性运行,通常摸排的手段是在测试环境或生产环境进行压力测试,以提前修复潜在的性能bug,给运维团队提供一定的系统性能信息。找性能bug的通用流程如下:

  1. 设计、明确压测目标,搭建测试环境
  2. 使用压测工具执行压测,通过各种工具及数据分析,初步定位性能问题
  3. 通过局部精细化调优,不断复测,直至达到预期目标

二、系统优化分析视角

如下图所示,该图为应用程序在单台服务器上的调用关系,通常情况下,一般性能调优是从用户负载及资源负载两个视角同时去分析。

用户负载分析方面主要关注应用程序的性能,资源负载分析主要关注系统消耗。程序方面的性能问题往往会在资源消耗上有所体现(当然CPU不高不代表程序没有性能问题,CPU高不代表程序有问题)

1、用户负载分析(往往借助APM工具,进行线程分析、内存分析等)

  • 线程状态分析(线程执行状态,是否有锁)
  • 热点、高消耗方法分析(CPU消耗)
  • 内存分析(java程序分析jvm,堆、栈内存分析)
  • 组件分析(组件参数、cpu、内存、IO)

2、资源负载分析

  • CPU(操作系统)
  • 内存(操作系统)
  • 磁盘
  • 网络、I/O

三、用户访问全局视角分析

如下图所示,用户在访问应用系统时,中间需要经过企业数据中心(公有云)的网络设备、路由器、交换机、安全设备,再抵达应用程序所部署的服务器上。中间一个环节出了问题,便可导致服务不可用。

如上的分析,系统如果出现延时、不可用等性能瓶颈时,要排查这些问题需要全局性的方法。整个系统-包括访问环境和系统自身都需要一一分析。由此可见,这项工作一个人是很难完成,这不仅涉及到软硬件的知识,而且需要对业务有所了解。为此,解决性能问题是一个工程问题,需要各个领域的人协同完成。

所以,在进行性能测试之前,需要对系统所经过的数据流部署监控,以期尽快定位问题,交由专业团队去快速解决。

四、性能优化思路

很多时候,我们遇到一个性能问题时,并不知道从何处去开始定位,初级技术人员往往是从系统层面开始,直接查看CPU、内存消耗,查了半天,运气好的话,找到一个问题,否则的话就不知所措。通常情况下,我们遇到的性能问题大多集中在常见的一些性能bug上,一些疑难杂症则需要专业级的选手参与解决,而通识类的性能问题一般的性能测试人员如果具备足够的经验与使用相应的工具也可以很快进行优化

如下图所示,本文作者通过用户负载及资源负载的角度出发,结合实际工作中出现的一些高频性能问题,分别分析了各个方面所需要关注的性能指标及排查思路。可操作性较强。

本文不对每个方面进行详细介绍,在这里针对CPU异常问题进行分析。具体案例在后续文章进行连载,编辑成册。

五、结语

1、在过去的几十年间,随着科学家在信息技术方面的突破,给越来越多的人带来了信息技术的岗位,而很多人的职业生涯就像郭靖一样,从“边陲小镇”开始,师从江南七怪,全真七子再到东邪西毒等大师,进而成为红遍大江南北的郭大侠。

2、如今的互联网世界,程序员的竞争愈发激烈,一边是互联网的寒冬缩招,一边是校招起薪再攀新高;一边是35岁被逼下岗,一边是应届生等着就业。两极分化不断加剧。

3、如王东岳老师在随笔集《知鱼之乐》里《苦海有边,回头无岸》说,“递弱代偿原理”“即是说:随着生物属性或能动性的提高(代偿度升高),它的可生存性倾向逐步趋近于零(存在度降低),这就为人类的繁衍在世,划定了一个日益逼近的自然极限。”而人所从事的工作必然随着技术的迭代而改进,躲在边陲小镇,则很容易递弱代偿

**正所谓:**万古长空,一朝风月。