当前位置: 首页 > 编程日记 > 正文

列举一些常见的系统系能瓶颈 Common Bottlenecks

http://www.nowamagic.net/librarys/veda/detail/2408在 Zen And The Art Of Scaling - A Koan And Epigram Approach 一文中, Russell Sullivan 提出一个很有趣的设想:一共有20种经典的瓶颈。这听起来就像只有20种基本的故事情节(20 basic story plots)那样让人怀疑。不过基于每个人不同的分类方式,这个说法或许是对的,但是在现实中,众所周知,瓶颈是无穷无尽的而且涉及方方面面。

一天, 来自 Terracotta 的 Aurelien Broszniowski 给我电邮了一份他心中的瓶颈列表,我们同时把我们的邮件抄送给了Russell, 他也给出了他的列表。而我也有我自己的想法。 所以,下面就是这几碗水煮成的一锅石头汤( http://en.wikipedia.org/wiki/Stone_soup, stone soup典故)

Russell 说要是年轻的时候就知道这些该多好啊,而对我来说则可以提供更多的思路。你的经验越多,处理过不同类型的项目,你就可以给这个列表增加更多的内容。因此当你在阅读这个列表时,或者是在整理自己的列表时,多年的丰富经验的积累以及遇到的一些小挫折,每一个故事都值得进行总结。

数据库

  • 工作中数据大小超过可用内存 RAM
  • 长短查询混合
  • 写-写 冲突
  • 大的联合查询占光内存

虚拟化

  • 共享 HDD 存储,磁盘寻道挂起
  • 云平台中的网络 I/O 波动

编程

  • 线程:死锁、相对于事件驱动来说过于重量级、调试、线程数与性能比非线性
  • 事件驱动编程:回调的复杂性、函数调用中如何保存状态(how-to-store-state-in-function-calls)
  • 缺少profile工具、缺少trace工具、缺少日志工具
  • 单点故障、横向不可扩展
  • 有状态的应用
  • 搓设计:一台机器上能跑,几个用户也能跑,几个月后,几年后,尼玛,发现扛不住了,整个架构需要重写。
  • 算法复杂度
  • 依赖于诸如DNS查找等比较搞人的外部组件
  • 栈空间

磁盘

  • 本地磁盘存取
  • 随机磁盘读写 -> 磁盘寻道
  • 磁盘碎片化
  • 写入超过SSD容量的数据导致SSD硬盘性能降低

操作系统

  • 内核缓冲刷入磁盘,填充linux缓冲区缓存
  • TCP缓冲区过小
  • 文件描述符限制
  • 功率分配

缓存

  • 不使用memcached
  • HTTP中,header,etags,不压缩(headers, etags, not gzipping)
  • 没有充分使用浏览器缓存功能
  • 字节码缓存(如PHP)
  • L1/L2缓存,这是个很大的瓶颈。把频繁使用的数据保持在L1/L2中。设计到的方面很多:网络数据压缩后再发送,基于列压缩的DB中不解压直接计算等等。有TLB友好的算法。最重要的是牢固掌握以下基础知识:多核CPU、L1/L2,共享L3,NUMA内存,CPU、内存之间的数据传输带宽延迟,磁盘页缓存,脏页,TCP从CPU到DRAM到网卡的流程。

CPU

  • CPU 过载
  • 上下文切换 -> 一个内核上跑了太多的线程,linux调度对于应用来说很不友好, 太多的系统调用, 等等...
  • IO 等待 -> 所有的CPU都挂起等待比较慢的IO
  • CPU 缓存: 缓存数据是一个为了平衡不同实例有不同的值和繁重的同步缓存数据保持一致,而精心设计的一个进程。
  • 背板吞吐量

网络

  • 网卡的最大输出带宽,IRQ达到饱和状态,软件中断占用了100%的CPU
  • DNS查找
  • 丢包
  • 网络路由瞎指挥
  • 网络磁盘访问
  • 共享SAN(Storage Area Network)
  • 服务器失败 -> 服务器无响应

过程

  • 测试时间 Testing time
  • 开发时间 Development time
  • 团队人数 Team size
  • 预算 Budget
  • 代码缺陷 Code debt

内存

  • 内存溢出 -> 杀进程,进入 swap ,越来越慢
  • 内存溢出导致磁盘频繁读写(swap相关)
  • 内存库开销
  • 内存碎片
  • Java 需要垃圾收集导致程序暂停
  • C 语言的 malloc 无法分配

如果你有更多的瓶颈见解与心得,欢迎补充。

转载于:https://www.cnblogs.com/svennee/p/4099608.html

相关文章:

Zeal 离线API文档浏览器

zeal是一个windows上的开源的离线文档浏览工具,基于docset格式,可以兼容全部dash的文档。zeal没有代码片段管理的功能,只提供文档浏览功能,不过windows下的用户可算是有的用了。dash目前只提供mac上的版本,作者说有往w…

iOS scrollToItemAtIndexPath 无效的解决方案

在UITableview中放置的UICollectionView,然后设置滚动没有效果scrollToItemAtIndexPath - (void)layoutSubviews {[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.selectedIdx inSection:0] atScrollPosition:UICollectionViewScrollPositio…

机器学习编程语言_我应该选择哪种编程语言? 我应该专注于前端吗? 后端? 机器学习?...

机器学习编程语言by Preethi Kasireddy通过Preethi Kasireddy 我应该选择哪种编程语言? 我应该专注于前端吗? 后端? 机器学习? (What programming language should I pick? Should I focus on front-end? Back-end? Machine l…

spdlog源码阅读 (1): sinks

0. spdlog简单介绍 spdlog 是一个快速的 C 日志库,只包含头文件,兼容 C11。项目地址 特性: 非常快只包含头文件无需依赖第三方库支持跨平台 - Linux / Windows on 32/64 bits支持多线程可对日志文件进行循环输出可每日生成日志文件支持控制台日志输出可选…

什么样的程序员才算成熟? 让程序员认清自己的所处的阶段

http://www.nowamagic.net/librarys/veda/detail/1450程序员在经历了若干年编程工作之后,很想知道自己水平到底如何?自己是否已经成为成熟的程序员?虽然程序员会对自己有一个自我评价,但是,自己的评价和社会的评价、专…

iOS访问系统日历 添加提醒事件

1 添加隐私请求提示 Privacy - Calendars Usage Description 2 代码 #import <EventKit/EventKit.h> // 添加提醒事件 - (void)addEventWithTimeStr:(NSString *)timeStr title:(NSString *)title planId:(NSString *)planId {EKEventStore *store [[EKEventStore al…

数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事

数据分析从头学by Mina Demian由Mina Demian 数据新闻学入门指南&#xff1a;让我们从头开始构建故事 (A Beginner’s Guide to Data Journalism: Let’s Build a Story From Scratch) This is an introductory guide on how to produce the beginnings of a piece of data jo…

Comparator 和 Comparable

Comparator 和 Comparable 比较 Comparable是排序接口&#xff1b;若一个类实现了Comparable接口&#xff0c;就意味着“该类支持排序”。而Comparator是比较器&#xff1b;我们若需要控制某个类的次序&#xff0c;可以建立一个“该类的比较器”来进行排序。 我们不难发现&…

朴素贝叶斯算法的python实现

朴素贝叶斯 算法优缺点 优点&#xff1a;在数据较少的情况下依然有效&#xff0c;可以处理多类别问题 缺点&#xff1a;对输入数据的准备方式敏感 适用数据类型&#xff1a;标称型数据 算法思想&#xff1a; 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件&#xff0c;那么…

iOS 加载本地和网络gif 图片类扩展

https://github.com/AlexanderYeah/GifKuoZhan [self.meiXueImgView showGifImageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:"美" ofType:"gif"]]];

arkit与现实世界距离比_如何使用ARKit和Pusher构建实时增强现实测量应用程序

arkit与现实世界距离比by Esteban Herrera由Esteban Herrera 如何使用ARKit和Pusher构建实时增强现实测量应用程序 (How to Build a Real-Time Augmented Reality Measuring App with ARKit and Pusher) Augmented reality (AR) is all about modifying our perception of the…

Servlet 3.0 新特性概述

Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员&#xff0c;随着 Java EE 6 规范一起发布。该版本在前一版本&#xff08;Servlet 2.5&#xff09;的基础上提供了若干新特性用于简化 Web 应用的开发和部署。其中有几项特性的引入让开发者感到非常兴奋&…

MVC、MVP、MVVM

MVC、MVP、MVVM这些模式是为了解决开发过程中的实际问题而提出来的&#xff0c;目前作为主流的几种架构模式而被广泛使用。 一、MVC&#xff08;Model-View-Controller&#xff09; MVC是比较直观的架构模式&#xff0c;用户操作->View&#xff08;负责接收用户的输入操作&a…

iOS 计算两个日期之间的差值

NSDateFormatter *dateFomatter [[NSDateFormatter alloc] init];dateFomatter.dateFormat "yyyy-MM-dd HH:mm";// 当前时间字符串格式NSDate *planDate [dateFomatter dateFromString:[model.PlanTime substringToIndex:16]];// 当前日历NSCalendar *calendar […

unity水管工_我是如何从30岁的管道工转变为32岁的Web开发人员的

unity水管工by Rick West由里克韦斯特(Rick West) 我是如何从30岁的管道工转变为32岁的Web开发人员的 (How I transformed from a 30-year-old plumber into a 32-year-old web developer) Friends often ask me why I decided to give up a solid, well-paying job like plum…

netty集成ssl完整参考指南(含完整源码)

虽然我们在内部rpc通信中使用的是基于认证和报文头加密的方式实现安全性&#xff0c;但是有些时候仍然需要使用SSL加密&#xff0c;可能是因为对接的三方系统需要&#xff0c;也可能是由于open的考虑。中午特地测了下netty下集成ssl的功能&#xff0c;关于ssl的握手过程以及jav…

呼叫中心的服务水平管理

对企业来讲&#xff0c;呼叫中心是企业的窗口&#xff0c;呼叫中心为客户提供服务&#xff0c;是企业提升品牌形象、建立客户忠诚度的最佳通道。因此&#xff0c;呼叫中心的服务水平对于企业来说意义重大&#xff0c;相应的服务水平管理更是企业必不可少的管理之一。 “客户至上…

iOS 数组中的模型去重

NSMutableDictionary *mutableDic [NSMutableDictionary dictionary];for (HomeRectProductModel *model in self.modelArr) {[mutableDic setValue:model forKey:model.Id];}[self.modelArr removeAllObjects];self.modelArr [[mutableDic allValues] mutableCopy];// 方法…

软件可读性和效率取舍_网络通信设计中的一些限制和取舍:摘要

软件可读性和效率取舍by Shubheksha通过Shubheksha 网络通信设计中的一些约束和折衷&#xff1a;摘要 (Some Constraints and Trade-offs In The Design of Network Communications: A Summary) This article distills the content presented in the paper “Some Constraints…

浅析对象访问属性的.和[]方法区别

原文链接&#xff1a;http://www.cnblogs.com/bigboyLin/p/4967820.html 简明版&#xff1a;请问js对象属性值为什么用数组也可以访问 在JavaScript中通常使用”."运算符来存取对象的属性的值。或者使用[]作为一个关联数组来存取对象的属性。但是这两种方式有什么区别了&a…

iOS 关闭页面侧滑手势

-(void)popGestureChange:(UIViewController *)vc enable:(BOOL)enable{if ([vc.navigationController respondsToSelector:selector(interactivePopGestureRecognizer)]) {//遍历所有的手势for (UIGestureRecognizer *popGesture in vc.navigationController.interactivePopGe…

CSS与HTML结合

CSS与HTML结合的4中方式&#xff1a; 1、每个HTML标签都有style属性 2、当页面中有多个标签具有相同样式时&#xff0c;可定义style标签封装样式以复用 <style type”text/css”>css代码</style> 3、当多个页面使用相同样式时&#xff0c;可将样式单独封装为CSS文件…

硬件断点反跳似乎_高性能应用程序:多路复用,反跳,系统字体和其他技巧

硬件断点反跳似乎by Atila Fassina通过阿蒂拉法西纳(Atila Fassina) 高性能应用程序&#xff1a;多路复用&#xff0c;反跳&#xff0c;系统字体和其他技巧 (High Performance Apps: Multiplexing, Debouncing, System Fonts, and other tricks) Here are some performance ti…

jquery仿邮箱文本输入框自动加载邮箱后缀

jquery仿邮箱文本输入框自动加载邮箱后缀 在像百度这样的网站注册时&#xff0c;你会看到输入邮箱会出现自动给用户输入补全主流邮箱。这种对于增加用户体验的小例子已司空见惯。正好看到人家写的这种js功能。还挺不错,使用起来很方便&#xff0c;几乎不用写神呢代码。"傻…

Maven最佳实践:划分模块

所有用Maven管理的真实的项目都应该是分模块的&#xff0c;每个模块都对应着一个pom.xml。它们之间通过继承和聚合&#xff08;也称作多模块&#xff0c;multi-module&#xff09;相互关联。那么&#xff0c;为什么要这么做呢&#xff1f;我们明明在开发一个项目&#xff0c;划…

facebook 直播_什么时候是在Facebook Live上直播的最佳时间? 我分析了5,000个Facebook帖子以找出答案。...

facebook 直播by Ofir Chakon由Ofir Chakon 什么时候是在Facebook Live上直播的最佳时间&#xff1f; 我分析了5,000个Facebook帖子以找出答案。 (When is the best time to stream on Facebook Live? I analyzed 5,000 Facebook posts to find out.) Streaming on Facebook …

解决keepalived脑裂问题

检测思路&#xff1a;正常情况下keepalived的VIP地址是在主节点上的&#xff0c;如果在从节点发现了VIP&#xff0c;就设置报警信息 脚本如下&#xff1a; #!/bin/bash # 检查脑裂的脚本&#xff0c;在备节点上进行部署 LB01_VIP10.10.10.229 LB01_IP10.10.10.129 LB02_IP10.10…

iOS 根据中文字符串排序出字母索引

// 传入字符串数组 返回索引字典 - (NSDictionary *)createCharacter:(NSMutableArray *)strArr {NSMutableDictionary *dict [NSMutableDictionary dictionary];for (NSString *stringdict in strArr) {NSString *string stringdict;if ([string length]) {NSMutableString …

devops开发运维训练营_嗨,网络开发人员训练营的毕业生:这是您第一份工作需要了解的内容。...

devops开发运维训练营by Rachel Bird雷切尔伯德(Rachel Bird) 嗨&#xff0c;网络开发人员训练营的毕业生&#xff1a;这是您第一份工作需要了解的内容。 (Hey web dev bootcamp grads: Here’s what you need to know for your first job.) You worked your butt off and gai…

[bzoj1042][HAOI2008]硬币购物

有三种硬币&#xff0c;每种有自己的币值。 然后有n次询问&#xff0c;每次都给出每种硬币的数量和要付的钱s&#xff0c;求有多少种付法。n<1000 s<100000 ------ 不考虑限制&#xff0c;就是个简单dp.... 有限制的时候&#xff0c;我们可以考虑反过来用总的方案数量剪掉…