文档章节

影响系统性能的几个原因

j
 jun9152143
发布于 2017/07/11 13:37
字数 1700
阅读 8
收藏 0

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

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

  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等工具库来优化通信的过程。

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

© 著作权归作者所有

j
粉丝 0
博文 113
码字总数 84802
作品 0
南通
私信 提问
阿里架构师的成长之路,Java开发者的技术梦要如何实现

写在开篇: 提升技术的误区: 有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。 有这种想法是错误的,主要有...

java进阶
2018/04/18
0
0
《高性能MySQL》第三章MySQL服务器性能剖析学习笔记

MySQL性能优化介绍 什么是性能优化呢?其实我们往往从广义的定义是觉得一个MySQL系统的非功能性的优化都会看作是性能优化,比如我们会将数据库服务器的稳定性、每秒执行的SQL查询数目、系统的...

杨武兵
2015/09/24
1K
2
Linux工具性能调优系列一:性能调优泛谈

一,为什么需要性能调优 我们平时中,总会遇到各种各种的性能问题,有应用层面的,网络层面的,操作系统层面的等等。在我看来,我们需要性能调优的原因有以下几个: (1) 这些问题如果不解决,...

奇犽
2018/11/26
0
0
关于服务器性能的思考

一、服务器性能 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt,其中load、cpu、mem来衡量机器性能,qps、rt来衡量应用性能。 一般情况下对于机器性能...

zqrferrari
2017/07/12
0
0
大型网站技术架构—架构要素和高性能架构

为了使网站的能够应对高并发访问,海量数据处理,高可靠运行等一系列问题,我们可以选择横向或纵向两个方向来入手 基本思路 首先可以对整个架构进行分层,一般可以分为 ,,;实践中,大的分...

楠木楠
2016/11/09
166
0

没有更多内容

加载失败,请刷新页面

加载更多

经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0
实战项目-学成在线(八)

在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息。 注册中心作用: 1、微服务数量众多,要进行远程调用就需要知...

lianbang_W
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部