您好, 访客   登录/注册

浅析应用程序性能分析与优化

来源:用户上传      作者:夏卫虎

  摘 要:性能是一种典型的非功能性需求,然而又贯穿在信息化项目的实际使用中,直接影响系统运行效率和用户体验。也正是由于这一特性,性能无法简单地通过单一的、直线式的思维来度量和管理,注定需要以系统工程的方法来掌握和调整。
  關键词:性能分析;性能优化;运维管理
  随着信息化基础设施的完善,企业为提高自身获取和处理信息能力,越来越多地选择把企业原有的工作流数据集成到业务系统中去。自2005年以来,国内企业进行了大规模的信息化建设,越来越多的企业定制开发属于自己的信息系统并逐步投入使用。但随着系统越建越多,信息系统的性能问题成为摆在运维管理人员面前的大问题。为什么有些应用程序经常卡顿,为什么业务网站又无法访问,运维管理人员怎样才能找到哪个逻辑更慢,怎么样才能做到优化改善,对于性能优化而言,最大的挑战是性能分析。本文作者通过总结多年信息化基础设施和信息系统运维管理经验,从以下五个维度分析提炼出影响应用程序性能的五个方面:
  一、应用程序
  性能调整尽可能接近完成工作的地方:它们在应用程序中是最好的。大多数情况下,一个应用程序都包括负载均衡设备、应用服务器、文件服务器、数据库服务器等。应用程序的内部可能很复杂,有很多可能的代码路径和行为。应用程序源代码一般是万行级,操作系统内核则上至百万行级。应用程序性能分析包括了配置应用程序实现系统资源最佳利用、归纳应用程序使用系统的方式,以及常见问题的分析。由于应用程序设计不合理。一旦运行,会频繁触发大量的内存/硬盘交换异常,占用大量的CPU时钟周期,导致无法响应客户端连接访问需求。一个能有效提高应用程序性能的方法是找到对应生产环境工作负载的公用代码路径,并开始对其做优化。如果应用程序需要经常与CPU交互,那么意味着代码路径会频繁占用CPU。如果应用程序需要经常从硬盘等外设读取数据,则应该查看导致频繁I/O的代码路径。这些都能通过分析和剖析应用程序来确定。
  二、CPU资源
  CPU是服务器硬件的核心,是系统性能分析的主要目标之一,微软、VMware等操作系统厂商会经常发布针对 CPU 类型对应用程序进行优化的建议。现代系统一般有多颗CPU,通过内核调度器共享给所有运行软件,当需求的CPU资源超过了系统力所能及的范围时,进程里的任务就会排队,等待轮询运行的机会,等待给应用程序的运行带来延时,使得性能下降。应用程序在CPU的运行时间可以通过编译器选项如字长设置来大幅改进。编译器也频繁地更新以利用最新的CPU指令集以及其他优化,有时应用程序性能可以通过使用新的编译器显著地提高。实际的诊断过程,运维管理人员可以通过仔细检查CPU的用量,寻找性能改进的空间,去除一些不需要的负载。
  三、物理内存
  物理内存是存储操作系统内核指令和应用程序的地方。除了缓存,在很多系统中,这些数据的二次存储的主要存储设备是磁盘,磁盘在处理大数量级数据方面的速度远低于物理内存。一旦物理内存被填满,系统将在内存和磁盘之间交换数据,这个相对缓慢的过程经常成为系统瓶颈,进而成为影响程序性能的重要因素。实际的应用程序分析需要检查影响系统性能的因素包括分配内存和释放内存、复制内存和管理内存地址空间映射的CPU开销。对于多处理器架构系统来说,内存的布局也是一个影响因素,因为连接到本地CPU的内存的延迟时间比远程CPU访问要低很多。
  四、文件系统和磁盘
  服务器数据存储包括逻辑组织和物理实现两大部分。逻辑组织即文件系统能够在各种不同的设备上组织和存储信息,协调所有的访问操作,确保操作的高效执行且不会相互干扰,物理实现即磁盘则是文件系统操作的底层硬件设备。文件系统使用缓存、缓冲和异步I/O来减轻磁盘延迟对应用程序的影响。磁盘是应用程序加载的来源,在高负载下,如果没有提前规划,很容易成为瓶颈,CPU持续空闲以等待磁盘I/O结束。发现并消除这些瓶颈能让性能和应用程序吞吐量明显提升,可以通过使用动态跟踪技术,包括操作系统附带或第三方工具(Dtrace)等,检查文件系统和磁盘关键指标如随机连续比例、读写比、命中率、磁盘响应时间等。
  五、网络资源
  随着应用系统访问人员的快速增长,应用程序也向着越来越分布化的方向演化,尤其在云计算环境中,网络在性能方面扮演着的角色越来越重要。除了改进网络延时和吞吐量,另一个常见的任务是消除可能由丢包引起的延时异常。如DNS 域名解析时间太长可以通过浏览器DNS缓存和DNS预加载解决,TCP每次都要建立三次握手,可以通过TCP长链接,预链接等措施处理。HTTP层面的优化可以分为 减少HTTP请求提及和 减少HTTP请求次数等方面优化。
  工欲善其事,必先利其器。针对应用程序性能优化,最大的挑战是性能分析,性能问题在复杂的软件中通常由多个因素造成,而性能分析要求运维管理人员深入了解应用程序、设备硬件以及网络的性能,明确每个环节执行时间的先后顺序,并做出合理的判断,即真正的任务不是寻找问题,而是辨别问题或者说是辨别哪些问题是最重要的。只有充分理解系统性能指标并找到适当的工具来分析可能的瓶颈,才能明晰影响系统性能各个要素,做出合理的判断,进而运用系统工程的方法来掌握和调整。应用程序性能优化的方案则需要构建在操作系统的深刻理解上,甚至构建在统计学和统计实验基础上。
  参考文献:
  [1]Brendan Gregg.性能之巅 洞悉系统、企业与云计算[M].电子工业出版社,2015.
  [2]谭志彬,柳纯录,周立新,卢光明.信息系统项目管理师教程[M].清华大学出版社,2017.
  作者简介:夏卫虎,男,本科,网络工程师,主要研究方向:网络、虚拟化、存储。
转载注明来源:https://www.xzbu.com/1/view-15060067.htm