列举一些常见的系统系能瓶颈 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 无法分配

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

时间: 2024-10-23 06:21:16

列举一些常见的系统系能瓶颈 Common Bottlenecks的相关文章

11.如何迅速分析出系统CPU的瓶颈在哪里

前几节里,通过几个案例,分析了各种常见的 CPU 性能问题.通过这些,相信对 CPU 的性能分析已经不再陌生和恐惧,起码有了基本的思路,也了解了不少 CPU 性能的分析工 具. 不过,我猜你可能也碰到了一个我曾有过的困惑: CPU 的性能指标那么多,CPU 性能分析工具 也是一抓一大把,如果离开专栏,换成实际的工作场景,我又该观察什么指标.选择哪个性能工 具呢? 不要担心,今天我就以多年的性能优化经验,给你总结出一个"又快又准"的瓶颈定位套路,告 诉你在不同场景下,指标工具怎么选,性能

探讨一下常见支付系统的对外接口

本文作者为我的朋友 Terry Gao,某互联网架构师,首发于其个人公众号[PHP架构] 经授权允许本账号转载. 看了之后,感觉写的非常到位,对于测试人员也很有帮助,故原文直接发布. 如果有朋友想了解支付相关测试,请点击-->互联网产品支付功能如何测试? 点击尾部 阅读原文,进入对方公众号. 原文如下 作为一个具备用户交易能力的网站,丰富它的支付渠道对于获客和提高日活都 有不可估量的积极作用.算起来,我接触过的支付系统也有几十个了,在这里总结一下我所接触过的支付系统对外接口的设计方案. 1. 支

列举一些常见的Python HTTP服务器

要使 Python 写的程序能在 Web 上被访问,还需要搭建一个支持 Python 的 HTTP 服务器.下面列举一些常见的 Python HTTP 服务器,以及它们目前的大致发展情况,以便用户的对比选择: Name Version http 1.1 Flavour Repo. Community Gunicorn 0.6.4 No processor/thread GIT #gunicorn uWSGI Trunk (253) Yes processor/thread repo Mailin

SQL 中常见的系统存储过程

原文:SQL 中常见的系统存储过程 -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_loginconfig --*报告SQL Server 实例在Windows 上运行时的登录安全配置 xp_logininfo --*返回有关Windows 认证登录的信息. xp_msver --*返回有关Microsoft SQL Server 的版本信息 xp_en

常见Windows系统变量对应表

常见Windows系统变量对应表 ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者http://blog.51cto.com/lander 2018/11/08 8:00 问题描述 日常 Windows 运维管理中经常要写一些脚本,需要知道一些对常见的系统变量比较了解. 常见系统变量对应表 %WINDIR% = 系统目录 C:\WINDOWS %SYSTEMROOT% = 系统目录 C:\WINDOWS} %SYSTEMDRIVE% = 系统根

常见linux系统中RPM包的通用命名规则

本文重点说一下在常见的linux系统中,RPM包通用的命名规则. RPM包的一般格式为:name-version-arch.rpmname-version-arch.src.rpm 例:httpd-2.2.3-29.el5.i386.rpmhttpd-devel-2.2.3-29.el5.i386.rpmhttpd-manual-2.2.3-29.el5.i386.rpmsystem-config-httpd-1.3.3.3-1.el5.noarch.rpm (1)name,如:httpd,是软

[Linux发行版] 常见Linux系统下载(转)

本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多的人得到帮助! 首先介绍以下几款国产的Linux发行版: Magic Linux 系统:Linux 基于:Fedora 起源:中国 架构:i386 桌面:KDE 分类:桌面.生活 Magic Linux是一个新的Linux发行,简称 MGC,是针对中国人的版本,由中国Linux公社的社区会员和Lin

Linux发行版·常见Linux系统下载

本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多的人得到帮助! 首先介绍以下几款国产的Linux发行版:Magic Linux 系统:Linux    基于:Fedora    起源:中国    架构:i386    桌面:KDE    分类:桌面.生活 magic Magic Linux是一个新的Linux发行,简称 MGC,是针对中国人的版本

linux系统系啊Yum配置

linux:yum仓库 yum是一个软件包管理器,一般我在安装完一个虚拟机的时候第一时间就是设置它的yum仓库,因为只有这样我们才可以轻松的安装redhat官方提供给我们的各种工具包.所以熟悉和懂得yum仓库的配置是非常重要的. 为什么是YUM? 基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载.安装. 是的,它帮助我们把各种RPM包的依赖性解决好了,只需要执行yum命令安装就可以了,所以很实用. 配置YUM