软件开发中常见的十大系统瓶颈[转载]

标签: 软件开发 常见 系统 | 发表时间:2012-11-08 10:19 | 作者:fwj380891124
出处:http://blog.csdn.net

Zen And The Art Of Scaling - A Koan And Epigram Approach中, Russell Sullivan提出了一个非常有趣的总结:软件开发常见的20个传统的系统瓶颈,这听起来像是说有 20个故事情节,并且依赖于你如何策划这些故事,或许都是真的,但唯有实践才知道它们带给我们的酸甜苦辣。

有一天, Aurelien Broszniowski给我发了一份电子邮件,把这些瓶颈用列表的方式展示出来。在接下来的交谈过程中,我又把该列表抄送给了Russell,Russell对此列表进行了整理。

Russell说:“我真希望在年轻时看到这样的一份列表”。伴随着经验的增长、项目的增多、解决各种不同类型的问题和不断总结各种经验教训,你会在这份列表上添加更多的东西。所以,当你在阅读该份列表时就像是在回顾一个个故事片段。

数据库

  • 工作任务内存超过可用的RAM内存
  • 长/短查询
  • 写入冲突
  • 大连接(join)占用内存

虚拟化

  • 共享一个HDD、磁盘寻死(disk seek death)
  • 在云端网络I/O波动

编程

  • 线程:死锁、调试、非线性扩展等
  • 事件驱动编程:callback()过于复杂、如何在函数调用中存储有状态等
  • 缺乏调优、跟踪、日志等
  • 单模块不可扩展、单点故障(SPOF:Single Point Of Failure)、非横向扩展等
  • 有状态应用程序
  • 设计问题:开发的应用程序只在自己的机器行运行正常,或者只是在几个人测试的时候正常(没有经历压力测试)。
  • 算法过于复杂
  • 相关服务,例如DNS查找以及其他可能屏蔽的服务
  • 堆栈空间

磁盘

  • 访问本地磁盘
  • 随机访问磁盘I/O
  • 磁盘碎片
  • 当SSD写入的数据大于SSD容量时,性能会下降

OS

  • Fsync饱和,Linux缓冲区填塞(Fsync flushing, linux buffer cache filling up)
  • TCP缓冲区太小
  • 文件描述符限制
  • 功率分配(Power budget)

缓存

  • 没使用memcached(数据库崩溃)
  • HTTP中:headers、etags、没有使用gzip压缩等。
  • 没有充分利用浏览器缓存
  • 字节码缓存(如PHP)
  • L1/L2缓存:这是个令人头疼的大瓶颈。把关键并且经常访问的数据存储在L1/L2中。这涉及到很多:snappy网络I/O,列数据库直接在压缩数据上运行算法等。利用一些技术不销毁你的TLB。最重要的思想是紧紧的抓住计算机的体系结构,涉及多核CPU,L1/L2,共享的L3,NUMA RAM,从DRAM到芯片数据传输带宽/延迟,DRAM缓存的DiskPages,DirtyPages,流经CPU<->DRAM<->NIC的TCP包。

CPU

  • CPU过载
  • 内容切换—>单核上开启的线程过多、Linux调度器、系统调用太多等
  • IO等待—>所有的CPU在同速等待
  • CPU缓存:缓存数据是一个细粒度进程,为了在多个实例与不同的值数据之间找到正确的平衡,来保持缓存数据的一致性和繁重同步。
  • 底板吞吐量(Backplane throughput)

网络

  • NIC刷爆、IRQ饱和、软中断占用掉了100%CPU
  • DNS查询
  • 数据包丢失
  • 网络中存在预期外的路由
  • 访问网络磁盘
  • 共享SAN
  • 服务器故障—>无法从服务处得到响应

进程

  • 测试时间
  • 开发时间
  • 团队规模
  • 预算
  • 代码债务

内存

  • 内存不足—>杀死进程,切换到swap,挂起
  • 内存不足导致磁盘交换(与swap相关)
  • 记忆库开销过大(Memory library overhead)
  • 内存分片(在Java中需要会因为内存回收而停顿;在C中,malloc总是开始分配内存)
作者:fwj380891124 发表于2012-11-8 10:19:08 原文链接
阅读:0 评论:0 查看评论

相关 [软件开发 常见 系统] 推荐:

软件开发中常见的十大系统瓶颈[转载]

- - CSDN博客推荐文章
在 Zen And The Art Of Scaling - A Koan And Epigram Approach中, Russell Sullivan提出了一个非常有趣的总结:软件开发常见的20个传统的系统瓶颈,这听起来像是说有 20个故事情节,并且依赖于你如何策划这些故事,或许都是真的,但唯有实践才知道它们带给我们的酸甜苦辣.

常见开源消息系统

- - Web 开发 : 从后端到前端
消息系统的作用:异步处理、削减峰值、减少组件之间的耦合. 选择消息系统根据业务需要需要考虑以下几个方面:. 其他,如消息丢失和重复的处理. 类似 MEMCACHE 的协议. 1、2 是不错的可选开源组件:. Kafka/MetaQ: 广泛用于 Linkedin 内部 (类似有 Java 版本的国产 MetaQ).

推荐系统的常见推荐算法的性能比较

- - ITeye博客
数据集是movielens-1M( 下载)版本. 使用SlopeOne算法,每次随机选取6%的用户预测其喜好,进行5次实验,取MAE的均值,得到下表:. 绘制成折线图,如下图所示:.  由此可知,训练集越大,则推荐的准确率越高. 使用ItemCF算法,训练集大小为数据集的90%,每次随机选取30%的用户预测其喜好,进行5次实验,取MAE的均值,得到下表:.

安装Windows 8.1后常见的系统优化设置

- - IE浏览器中文网站
Windows 8推出后,因开始画面与动态磁贴的操作界面毁誉参半. 小编觉得动态磁贴确实是一个创举,曾几何时,菜单里哪里有网页的身影. 到现在上网却成为了开机的主要目的. 从Windows8的IE10首次支持固定网站到菜单,到Windows8.1里 IE11开始支持任意网页磁贴实时动态滚动播放最新网站内容,这让IE不再仅仅是浏览信息的工具,更是信息本身或者获取信息的快速渠道.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

常见分布式应用系统设计图解(十二):证券交易系统

- - 四火的唠叨
这篇讲的是证券交易系统,这类系统包含的内容很多,但是我们还是把目光放在核心的交易部分,比如说股票交易. 在某个可交易时间,如果卖家 A 要以至少 y 的价格卖掉股票 x,卖家 B 愿以至多 y 的价格买入股票 x,那么这个交易就可以发生. 虽说是交易系统,但是它和任何一个支付平台的交易系统有着显著的不同,它的核心是一个竞价匹配的机制,而非货币支付的机制,简单地说,这个机制包含了这样四个步骤:.

软件开发的“三重门”

- - 酷壳 - CoolShell.cn
自从上次写了“ 程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了. 而春节前有人问我,是做底层技术,还是做业务. 这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章.

软件开发的人文关怀

- - 博客园_知识库
  几年前,我从温伯格的《技术领导之路》中学到一点:技术人员往往更喜欢和机器打交道,因为他们“认为”自己更适合和机器打交道;但是,优秀的技术人员必须(也必然)具备好的沟通能力. 所以,温伯格鼓励各位技术人员多加练习和其他人打交道的能力. 温伯格的这个观点我是非常赞成的,好的技术人员一定需要“勇敢”面对他人,不能被“自实现的预言”局限在机器的世界里.

软件吞噬软件开发

- - PingWest中文网
软件蚕食世界,自互联网特别是移动互联网连接线上线下服务后,已成为不可逆的趋势. 每一项实用的服务可以由小团队来完成. 以WhatsApp为例,这款被高调收购的IM应用,拥有4.5亿月活跃用户,70%的日活跃率,至今还保持每天新增用户1000万的速度. 但这些服务居然由32名工程师支撑下来了,所以有了业界八卦“每位员工价值20亿”的说法.

软件开发中的两种态度

- - 外刊IT评论网
一种态度认为,应该对程序员在软件开发中的行为进行约束( DirectingAttitude). 持这种态度的人认为大部分的程序员水平都不高(谣传说有50%的人低于平均水平),所以应该对他们所做的事情进行管教约束. 要防止他们做一些可能会给他们正在开发的系统带来危害的事情. 通常,这种态度体现在一些系统设计和工具中时,你会发现它们会试图阻止程序员去做某些事情,限制程序员的一些做法,以此避免他们陷入过于复杂的境况.