下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

影响系统性能的几个原因

作者:课课家教育     来源: http://www.kokojia.com点击数:2123发布时间: 2017-02-24 10:00:21

标签: 系统运维系统性能数据结构

  要想发挥系统的一个性能,必须是要让系统发挥它的一个特别的优势,在实际中影响系统性能的原因到底有什么原因呢?这一点我们还是需要了解清楚的,下面我们来看看到底有什么原因会影响系统的性能?

影响系统性能的几个原因_系统运维_系统性能_数据结构_课课家

  1、日志问题

  性能问题竟然是日志所带来的问题,对于大多数日志系统来说,随着进程数量的增加,记录日志所需要的时间也会线性增加。在进程数量达到8个时,日志记录时间大约为0.15s,非常影响系统的响应速度。因此日志是一个比较重要的性能瓶颈,也是经常是被人忽视的重点。

  我们可以使用异步logger来去解决这个问题,同时小心设计logger所记录数据的结构,以便进行后续的读取和处理。

  除此之外,logger重复记录同一个错误是非常浪费性能的,我们可以将它设置为只记录第一次错误,最后是可以设置一个计数器来去记录错误发生的次数,这个方法也算是比较实用的。

  2、函数设计问题

  在保证代码的易读性的同时,然后是提高代码的性能可能会比较困难。

  实际上有很多技巧可以在避免一些常见性能问题的同时,不会过多牺牲代码的可读性。例如,用C++语言写函数参数时,可以考虑使用引用或指针类型,这样可以避免在函数内生成临时的数据结构,并且是不用返回数据。

  对于很多语言来说,函数返回Iterable就比直接返回Array要好,并且还将不会是影响易读性。

  3、通信同步的问题

  有做过网页前端的朋友将会有一定的经验,当浏览器访问网页时,速度可能会很慢,而再好再贵的服务器也解决不了这个问题,因为有些用户还是有可能用2G的手机网络来访问你的网站。

  还是有办法可以尽量让网页加载速度快一点。比如优化图片的大小,让不同分辨率的屏幕加载不同大小的图片,优化脚本加载顺序,以及尽量采用异步加载等实用的方法技巧。

  4、没有理解TCP的原理

  如果是不理解TCP的原理就开始考虑微服务架构,在某些情况下,若是遇到ACK延时可能导致每秒只能传输2-5个包。那么造成这个现象的原因是,TCP中的Nagle和TCP延时确认两种算法有时会造成进程死锁,并且是会影响微服务间的一个通讯。

  5、内存回收比较慢

  这个问题它指是自动内存回收导致的问题。

  使用自动内存回收的语言或者工具时,一次性分配过多的内存会增加内存回收的时间,这也将会是导致系统速度变慢。

  6、数据结构的选择

  如果你是把超过1GB的数据存在一个数据结构里,就需要小心内存的读取速度了。这对于一个超过2GB的字典,java的HashMap比.NET的字典慢10倍以上。在别的一些情况下,Java可能也比.NET快。

  当在处理特别占有内存的数据时,在选择数据结构上需要进行仔细的一个斟酌,同时的话不要太依赖系统自带的数据结构,这一点我们是需要了解清楚的。

  7、环境没有升级到最新版的问题

  实际上有多数的人是不愿意把软件运行的环境或者系统升级到最新版,因为这些升级很可能会影响到正在运行的软件或服务。若想希望提高系统的性能,是可以先在测试环境中试一试。

  同时是应该采取持续集成的工作流程,需要去经常更新代码,写完整的测试,此外试试看是否有一些bug可以通过升级它所依赖的环境就得到解决。

  8、重复运行的代码导致的问题

  这是一个常见的问题,要了解清楚代码可以运行,和可以有效率地运行是两回事。一段代码可能被重复调用了很多次,在表面上看起来却没有问题。比如每次需要一个文件就从磁盘读取,当你用过之后并不缓存起来,这也将会是导致接下来访问这个文件都是会变得很慢。

  9、并行的原因

  我们知道并行任务的通信和同步需要系统开销,并且这些通信和同步本身并不一定是并行的。根据阿姆德尔定律(AmdahlLaw),如果5%的系统活动需要串行,不管是使用多少个处理器,系统最多也只能加速20倍。而通用扩展性定律(USL)则指出,在处理器达到一定数量后,并行系统的通讯开销会导致性能下降。

  在建立并行系统时,尽量避免引入共享可变的全局数据,一旦出现问题,几乎是不可能知道是哪里的代码有问题,建议是使用不共享数据的方式构建并行系统,又或者是严格控制写入数据的场景。

  如果需要给算法加速,首先是要去考虑单线程的情况,然后是再考虑复杂的并行情况。

  10、数据编码问题

  有很多的程序员是喜欢用JSON,XML,或Base64等编码格式来传送数据,因为这样数据更具有可读性,在debug时就非常的方便了。

  但系统间的交互是不需要可读性的,将二进制的数据转换成文本再转换成二进制不仅消耗CPU,还消耗网络带宽。

  实际上你可以用Wireshark来debug服务器通信,又或者是使用ProtoBuffer,Thrift等工具库来优化通信的过程。

  总结:导致系统性能变慢的原因还算是有比较多的原因的,在实际的使用中可以是根据出现的问题,适当的去采取有效的措施方法来提升系统性能,这是在系统运维中要掌握的基本技巧。

赞(15)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程