阅读更多

0顶
0踩

研发管理

原创新闻 服务器负载优化技巧

2017-06-19 10:12 by 副主编 jihong10102006 评论(0) 有11861人浏览
引用
原文:Tips and Tricks for Reducing Server Load
作者:Thayne McCombs
翻译:Vincent

译者注:作者以字体服务为例,首先分析了为什么服务器的负载会那么高。找到原因以后,将服务器端的部分工作进行转移,从而降低了服务器端的负载。以下为译文。

我们有一个面向服务的架构。其中一个服务是字体服务,它负责根据family和Unicode提供字体数据,并检查用户上传的字体的权限。我们没有想到字体服务具有特别高的负载(负载是使用或等待CPU的平均线程数)。然而去年我们注意到字体服务的负载令人惊讶,特别是在访问量很少的夜晚。幸运的是我们能够找到根本原因,并大大增加我们的字体服务的性能和整个系统的稳定性。接下来介绍一下我们是如何做到的。

图1:更改前后的服务器负载。(Fix于12月21日发布)

使用火焰图s进行调试

我的一位同事在Netflix的Brendan Gregg发现部署了一个灵活的火焰图形工具。这个工具结合了很多分析工具的数据,从而把本地和JVM函数使用的资源展示在单个图形中。图中的每个矩形表示单个堆栈帧-矩形的宽度表示使用了多少资源(如CPU时间),y轴表示调用堆栈。要找到有问题的功能,你只需要找出宽矩形就可以了。该工具在调试字体服务时的性能表现是非常不错的。

图2:高负载时字体服务器的火焰图

在高负载状态下,我们从字体服务收集了几个火焰图。这里显示了其中的一个,还包括了火焰图JVM部分的特写。我们很快就发现这些火焰图中的一个图案。大部分时间都用于libz.so(用于GZIP压缩/解压缩),并且JVM中的大部分时间都消耗在了XML转义和UTF-8编码。

图3:火焰图中JVM特写部分

为什么如此之慢

首先,这里介绍了字体服务是如何工作的背景。我们将字体数据存储在Amazon S3存储区中,为每种字体的每个Unicode范围提供单独的对象。其他服务将请求字体数据的字体组、一组Unicode范围和一个用户。字体服务将为用户访问的每个字体下载指定范围的数据,然后返回包含所有数据的XML响应。

这个功能非常简单,并没有什么明显的密集的计算。然而,负载还是比较高的。通过火焰图,我们可以看出libz,XML转义和UTF8编码都占用了大量的CPU。但是为什么编码以及压缩会如此耗时呢?还记得我说过晚上的负荷是最高的吗?好吧,我们(美国山区时间)是夜晚时,亚洲可能是白天。虽然我们这边晚上的访问量较少,但是其他地方的用户在这段时间内正在使用中文,日文和韩文等亚洲语言的Unicode系列。结果显示,这些范围的字体数据的访问量要大得多。这些数据是使用gzip解压缩,用UTF-8解码,然后XML转义,UTF-8编码和GZIP压缩。对于类似于拉丁语这种小范围的,这个过程可能并没有什么影响。然而,单个中文、日文或韩文的范围比拉丁语范围大2个数量级(前者相当于1MB,后者是60KB)。对于这些范围较大的,所有这些转换都会影响CPU。Gzip压缩和解压缩代价相对比较高,XML转义并不是太高。

我们是如何使它变快的

来自字体服务的响应内容,从本质上看来,仅仅是S3的原始数据的集合。字体服务确实执行了一些重要的附加任务,如权限检查和从字体系列的名称查找字体键。然而,字体服务也不是说就必须得从S3代理字体数据。我们的解决方案很简单。我们只是简单地回应了包含字体数据的S3对象的直接链接列表,而不是在字体服务中下载,再重新编码字体数据。

这样更改以后,字体服务器上的负载减少到几乎什么都没有(参见图1),它对客户端服务的响应也没有明显的影响。尽管我们的第一次尝试是成功的,但我应该注意到,将它部署在一个特性标志上,它可以让我们在请求的百分比上进行测试,以测试它的工作是否成功,然后将其100%地转化为100%。

结论

通过对生产服务器进行分析,我们能够找出那些服务器端没有必要进行处理的工作,并且去掉这些冗余的工作。以下是我们总结的一些经验。
  • 使用诸如火焰图形之类的分析工具找出那些占用CPU的功能。
  • 压缩和其他编码的代价很高。
  • 如果客户端能够直接访问数据,通过发送链接可以提高整体性能,而不是代理数据。(免责声明:这也不是像那些神奇的子弹一样任何情况下都能通用,在某些情况下,在某些情况下可能会对客户端的性能造成伤害,因为它必须要发出第二个请求。)
  • 大小: 44.2 KB
  • 大小: 47.9 KB
  • 大小: 46.9 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 值得收藏的20个Linux服务器性能优化技巧

    它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的。...

  • 不可不知的HTML优化技巧

    如何提升Web页面的性能,很多开发人员从多个方面来下手如JavaScript、图像优化、服务器配置,文件压缩或是调整CSS。 很显然HTML 已经达到了一个瓶颈,尽管它是开发Web 界面必备的核心语言。HTML页面的负载也是越来越...

  • 十条服务器优化的小技巧

    因为反向代理带来的灵活性,所以反向代理也是一些性能加速功能的必要前提,比如: 负载均衡 (参见 Tip #2) – 负载均衡运行在反向代理服务器上,用来将流量均衡分配给一批应用。有了合适的负载均衡,你就可以添加...

  • win服务器网络优化,深度技术解析win10服务器提速优化方案-SEO顾问

    服务器的提速是大家都想解决的问题,很多企业使用最新的win10系统做服务器,也是看中其安全稳定的因素,可是相对其他系统访问速度偏慢点。虽然和之前版本相比,Win10在底层性能上已经不错,但毕竟要照顾不同的使用...

  • MySQL 性能调优和优化技巧

    如果您的内存不足,您的服务器将缓存数据存储(如硬盘)以充当内存。在示例查询中,在末尾使用通配符有助于降低查询成本,因为要经过更少的表行。MySQL 是一种流行的开源数据库应用程序,它以一种有意义且易于访问的...

  • Linux服务器性能优化

    它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的。...

  • 服务器卡顿、CPU飙升、接口负载剧增,如何定位到Java代码?

    针对这种情况可以使用iostat命令查看,如果磁盘负载较高,可以针对性地进行优化。比如,借助缓存系统,减少磁盘I/O次数;用顺序写替代随机写入,减少寻址开销;使用mmap替代read/write,减少内存拷贝次数。另外,...

  • MySQL优化技巧

    MySQL优化三大方向① 优化MySQL所在服务器内核(此优化一般由运维人员完成)。② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。③ 对SQL语句以及表优化。MySQL参数优化1:MySQL 默认的最大...

  • 服务器优化web性能技巧总结

    负载均衡服务器首先是一个反向代理服务器(参见Tip #1)——它接受来自互联网的流量,然后转发请求给另一个服务器。特别是负载均衡服务器支持两个或多个应用服务器,使用分配算法将请求转发给不同服务器。最简单的...

  • 提升网络性能:掌握负载均衡和优化技巧

    在实际生产环境中,负载均衡器通常会使用更复杂的算法和配置,例如通过监控服务器的负载情况来动态调整负载均衡策略。异步请求:将一些耗时的操作(如数据库查询、文件上传等)放在后台进行,使用异步请求可以避免...

  • 前端常用的优化技巧

    比如在Network面板,这里可以看到我们与服务器交互的信息,发出请求的数量,请求的时长,还有各种js文件的读取。 performance面板,我们可以看到从请求到解析各种文件的所需时间 优化方法 1、减少 HTTP 请求 网站

  • 18个网站优化技巧

    快速的页面加载对提升搜索引擎排名、网站转化率和整体的用户体验是非常重要的。网站页面的加载速度也是衡量...1、图片优化首先,你需要优化你网站上的图片,来获得丝毫加速网站的机会。从原图上移除额外的注解、不必

  • linux mysql优化_Linux数据库的MySQL性能优化技巧

    Linux数据库的MySQL性能优化技巧事实上,许多最常见的错误都隐藏在MySQL性能问题的背后。为了确保你的MySQL服务器能够一直处于全速运行的状态,提供持续稳定的性能,杜绝这些错误是非常重要的。然而,这些错误又往往...

  • 阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

  • mysql性能优化的8个方法_关键的十个MySQL性能优化技巧

    为了确保你的MySQL服务器能够一直处于全速运行的状态,提供持续稳定的性能,杜绝这些错误是非常重要的。然而,这些错误又往往隐藏在工作负载和配置问题之中。幸运的是,许多MySQL性能问题都有着相似的解决方案,这...

  • ABAP优化常用工具及优化技巧

    ABAP优化常用工具及优化技巧

  • Tomcat服务器性能优化

    minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较...

  • 优化SQL的技巧

    如何适当优化SQL? 许多人在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策...

Global site tag (gtag.js) - Google Analytics