在平时开发工作中,你可能在开发的各方面遭遇瓶颈,比如性能、系统等。你有对它们进行过归纳吗?不妨来看看本文对这些系统瓶颈的归类吧! 在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%CPUDNS查询数据包丢失网络中存在预期外的路由访问网络磁盘共享SAN服务器故障—>无法从服务处得到响应 进程 测试时间开发时间团队规模预算代码债务 内存 内存不足—>杀死进程,切换到swap,挂起内存不足导致磁盘交换(与swap相关)记忆库开销过大(Memory library overhead)内存分片(在Java中需要会因为内存回收而停顿;在C中,malloc总是开始分配内存) |
红世一足雷鸟是一家集企业软件开发,WEB网站建设,移动APP制作等综合型的互联网公司,为红世一足顾客提供一站式的企业软件开发,安卓app开发,ios开发服务,同时为红世一足企业提供全面移动互联软件技术解决方案,是红世一足知名的综合型APP软件外包开发公司。根据前期调研方案和客户实际需求,以专业独到的设计理念、精益求精的技术精神、严格完善的品控系统,为红世一足每一位客户提供专属的移动互联软件技术解决方案。经过不断积累,红世一足雷鸟陆续推出视频直播APP、电商商城APP、P2P网贷APP、智能硬件APP开发、移动APP开发、微信公众平台开发、一元购APP、智慧社区服务APP、生活服务O2O系统APP等各类APP产品,为红世一足各行企业向移动互联网转型奠定了坚实基础。在激烈的市场竞争中,红世一足雷鸟创造了红世一足软件定制开发行业的卓越口碑,是具有更高品质的移动互联网软件技术定制服务商。