推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 性能测试之道 > 关于有效的性能调优的一些建议

关于有效的性能调优的一些建议

性能测试之道 2018-10-27

 

关于有效的性能调优的一些建议


1. 算法本身的优化


算法优化是性能局部优化的首选, 并常采用各种性能监控软件来度量CPU时间、内存占用率、函数调用次数以问题定位,然后实施各种调优方法,如优化循环、利用空间换时间、采用合适的数据结构等。但是算法本身的优化只能够帮助大家消除一些明显的编程细节引起的瓶颈,尤其单单通过算法优化的手段还不能完全解决性能问题,且具有非常大的难度。


2. 优化运行环境与资源


运行环境与资源包括各种软硬件平台,硬件环境包括CPU、内存、磁盘以及网络等。最简单且最省事的调优方法是优化硬件资源,使用快速计算资源代替慢速计算资源,提升资源的计算能力。


优化硬件资源的方式包括:


更快的CPU


更快的本地IO设备,比如内存代替硬盘, SSD 代替机械硬盘


加内存减少分页



快速计算资源代替慢速计算资源,比如快速存储代替慢速存储(属于同类型资源);本地计算换网络传输的优化最好采用压缩传输内容的优化手段(属于不同类型的资源),该方式尽管增加了CPU的压缩/解压时间,但减少了大量网络传输时间


软件环境包括操作系统、数据库、中间件等。软件环境调优的成本要相对较高, 并且工作量很大,如从Windows平台迁移到Linux 平台、从数据库A切换到数据库 B、从EJB 切换到 Spring等。这类调优见效快,但受制于预算和硬件本身的限制。由于资源始终是有限的,随着资源的消耗,仍然存在性能瓶颈。


3. 优化算法和资源间的交互


当前各种调优实践最集中的领域是优化算法和资源间的交互,如减少单台服务器(或单位计算资源)的处理量、充分利用系统资源、减少不必要的计算、减少不必要的IO等。


具体内容如下:


减少单台服务器(或单位计算资源)的处理量


当在单台机器处理能力已达上限的情况,就需要把压力分散到多台机器上, 从而使每台机器都能获得可接受的延迟或吞吐量。总的优化原则是分而治之,具体维度包括业务、组件边界、访问频率或对系统资源的消耗程度、瓶颈资源等。


具体内容如下:


业务:把大应用按业务分成独立的互相合作的系统,如高层的采用SOA方式,低层的采用数据库分库方式


组件边界: Web服务器、应用服务器、数据库服务器、文件服务器


对系统资源的消耗程度:采用读写分离的方式


瓶颈资源: 对数据库进行分表、分片


一旦按上述维度处理好了,大家还可以在所有维度上应用负载均衡,把访问量分散到不同服务器。


充分利用系统资源


采用多进程、多线程、异步操作以及负载均衡等手段,其中负载均衡主要做到了防止某台服务器过满和防止某台服务器过闲。


减少不必要的计算次数


缓存计算结果,尤其是服务端缓存,以减少不必要的计算。


减少不必要的 IO 次数


网络IO次数:客户端缓存、CDN缓存、合并资源以减少请求次数


磁盘IO次数:缓存常用数据,如利用Redis、Memcached进行缓存


最后,总结指出缓存是减少不必要计算和IO的重要手段,缓存的设计主要是根据资源变化频率对资源进行分类,比如动静分离等;其前提是恰当的状态管理、分离无状态的逻辑和有状态的逻辑,但会付出对一致性的一定妥协和运维的复杂为代价。缓存的适用场景包括热点不均衡、有效时间不太短、一致性牺牲程度可接受。作者还指出以上所有优化手段可以组合使用,有冲突时再做权衡。


 

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《关于有效的性能调优的一些建议》的版权归原作者「性能测试之道」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注性能测试之道微信公众号

性能测试之道微信公众号:PTesting

性能测试之道

手机扫描上方二维码即可关注性能测试之道微信公众号

性能测试之道最新文章

精品公众号随机推荐

上一篇 >>

1.了解apache