翻译自: http://highscalability.com/blog/2012/5/16/big-list-of-20-common-bottlenecks.html
数据库:
工作空间大小超过可用内存(Working size exceeds available RAM)
运行长时间和短时间查询(Long & short running queries)
写-写冲突(Write-write confilicts)
大的连接占用内存(Large joins taking up memory)
虚拟化 Virtualisation:
共享磁盘驱动器,磁盘定位死(Sharing a HDD, disk seek death)
云环境下网络I/O波动(Network I/O fluctuations in the cloud)
编程 Programming:
多线程:死锁,比事件更重量级,调试,非线性扩展等(Threads: deadlocks, heavyweight as compared to events, debugging, non-linear scalability, etc ...)
事件驱动编程:回调复杂性,如果在函数调用里存储状态等...(Event driven programming: callback complexity, how-to-store-state-in-function-calls, etc...)
缺少调优,缺少跟踪,缺少日志(Lack of profiling, lack of tracing, lack of logging)
不能单块扩展,单点故障,不能水平扩展等(One piece can't scale, SPOF, non horizontally scalable, etc ...)
有状态的应用(Stateful apps)
不良设计:开发者创建了一个在他们的计算机上运行良好的应用。这个应用进入产品,在几十个用户里运行良好。数月或数年以后,这个应用不能在几千个用户下运行,需要彻底重新架构和重写。(Bad design: The developers create an app which runs fine on their computer. The app goes into production, and runs find, with a couple of users. Months/Years later, the application can't run with thousands of users and needs to be totally re-architecture and rewritten.)
算法复杂性(Algorithm complexity)
独立服务器如DNS查询和其他任何可能导致阻塞的(Dependent services like DNS lookups and whatever else you may block on.)
栈空间(Stack space)
磁盘 Disk:
本地磁盘获取(Local disk access)
磁盘随机I/O->磁盘定位(Random disk I/O -> disk seeks)
磁盘碎片化(Disk fragmentation)
SSD性能下降,在已写数据超出SSD大小时(SSDs performance drop once data written is greater than SSD size)
操作系统 OS:
Fsync 刷新,linxu缓存充满(Fsync flushing, linux buffer cache filling up)
TCP缓存太小(TCP buffers too small)
文件描述符限制(File descriptor limits)
功率预算(Power budget)
缓存 Caching:
未使用memcached(数据库冲击)(Not using memcached (database pummeling))
In HTTP:headers, etags, not gzipping, etc...
没充分利用浏览器缓存(Not utilising the browser's cache enough)
字节码缓存(Byte code caches(e.g. PHP))
L1/L2 caches. This is a huge bottleneck. Keep important hot/data in L1/L2. This spans so much: snappy for network I/O, column DBs run algorithms directly on compressed data, etc. Then there are techniques to not destroy your TLB. The most important idea is to have a firm grasp on computer architecture in terms of CPUs multi-core, L1/L2, shared L3, NUMA RAM, data transfer bandwidth/latency from DRAM to chip, DRAM caches DiskPages, DirtyPages, TCP packets travel thru CPU<->DRAM<->NIC.
CPU:
CPU过载(CPU overload)
上下文切换。(Context switches -> too many threads on a core, bad luck w/ the linux scheduler, too many system calls, etc...)
IO等待(IO waits -> all CPUs wait at the same speed)
CPU Caches: Caching data is a fine grained process (In Java think volatile for instance), in order to find the right balance between having multiple instances with different values for data and heavy synchronization to keep the cached data consistent.
底板吞吐量(Backplane throughput)
网络 Network:
NIC maxed out, IRQ saturation, soft interrupts taking up 100% CPU
DNS查询(DNS lookups)
包丢失(droped packets)
在网络里的非预期路由(Unexpected routes with in the network)
网络磁盘获取(Network disk access)
Shared SANs
Server failure -> no answer anymore from the server
过程 Process:
测试的时间(Testing time)
开发的时间(Development time)
团队大小(Team size)
预算(Budget)
编码债务(code debt)
内存 memory:
内存溢出(Out of memory -> kills process, go into swap & grind to a halt)
内存溢出导致磁盘颠簸(与swap相关)(Out of memory causing Disk Thrashing(related to swap))
内存库的开销(Memory librar overhead)
内存碎片化(Memory fragmentation)
- 在Java里请求GC 暂停(In Java requires GC pauses)
- 在C,malloc调用开始永不返回(In C, malloc's start taking forever)
相关推荐
四元式表示法是编译器生成的中间代码的一种常见形式,它由四个部分组成:操作码、第一个操作数、第二个操作数和结果。在处理DO-WHILE循环时,四元式可以清晰地表示循环的开始、条件检查和结束逻辑,便于后续的优化和...
### Fearless Cross-Platform Development with Delphi 中文翻译版 #### Delphi教程 **Delphi** 是一种功能强大的编程语言及开发环境,以其高效的代码执行速度、丰富的类库支持及跨平台开发能力著称。本教程旨在...
对于分布式数据库系统,TPC-DS测试尤为重要,因为它可以暴露系统在处理大规模并行查询时的瓶颈和优化潜力。通过TPC-DS测试,数据库厂商和用户可以评估系统在大数据环境下的性能,从而做出明智的技术决策。 总而言之...
综上所述,文档中不仅讨论了C语言编程中的一些常见错误,如逻辑错误、if语句中的符号使用错误等,还深入分析了虚拟化技术在iSCSI协议中的应用,包括元数据服务器的设计、存储管理和映射。文档的结尾也强调了学习和...
传统DBMS并非为快速和连续加载单个数据项而设计,并且它们不直接支持数据流应用中常见的连续查询。此外,人们认识到近似计算和适应性是在高速数据流上执行查询和其他处理(例如数据挖掘)的关键因素,而传统的DBMS...
- 选项C不正确,单总线虽然设计简单,但由于所有设备共享一条总线,可能会导致性能瓶颈。 - 选项D正确,专用总线针对特定设备优化,可以提高数据传输效率。 - 正确答案为C。 #### 题目三:软件著作权 - **题目**...
书中会介绍如何设计和执行性能测试,以确定系统在高负载下的行为和瓶颈。 7. **安全性测试**:随着网络安全的重要性日益凸显,安全性测试成为了测试领域的一个热点。书中会涵盖常见的安全测试方法,如渗透测试和...
综上所述,这个压缩包提供了全面的系统级编程实践,从代码表示到内存管理,再到安全和性能优化,为学生提供了丰富的学习材料,有助于他们在实际操作中提升系统编程技能。通过这些实验和文档,学生不仅可以巩固理论...
在现代软件开发中,跨语言交互成为了一种常见的需求。本篇文章将详细探讨一个名为"rust-dart-test"的项目,该项目旨在展示Rust和Dart两种编程语言如何协同工作,以及在实际应用中如何进行源码级别的互操作。我们将从...
- 高效的系统架构设计是实现集群和可扩展性的关键,本书将深入讲解分布式系统中常见的设计模式,如微服务架构、事件驱动架构、服务网格等。 - 这些设计模式有助于实现系统的模块化、弹性以及更细粒度的扩展性。 7...
- **应用场景**:内存分区管理中,操作系统会将物理内存划分为若干个区进行管理。 #### 29. Bandwidth 宽带(外设与存储器的传送速率范围) - **定义**:带宽是指在给定时间内通过特定路径的最大数据传输速率。 - **...
在Android开发领域,构建浏览器或类似浏览器的应用程序是一项复杂的工作,涉及到网络通信、渲染引擎、用户界面设计等多个方面。"android-components"是一个开源项目,它提供了一组专门针对这一目标的库,帮助开发者...
#### 二、ASP求职招聘网站设计概述 ##### 1. 系统需求分析 开发一个求职招聘网站前,首先需要对系统进行需求分析,明确网站的主要功能和目标用户群体。例如,需要考虑哪些功能模块是必需的(如职位发布、简历投递...
为了解决这一问题,操作系统和硬件设计者采取了多种措施,如引入缓存机制,将常用数据保持在速度快的主存中。文章提到,由于内存管理涉及数据完整性的保证,这方面的内容在本文中不会深入讨论,但会给读者提供一些对...
该教程由一个技术翻译小组翻译完成,详细介绍了Hibernate的原理及其在Java技术中的应用。 #### 二、版本说明 本教程基于**Hibernate 3.2版本**进行编写。随着后续版本的发展,部分API和特性可能会有所变化,但基础...
本书的第二章详细介绍了如何构建和运行Linux内核模块,从设置测试系统到编写第一个Hello World模块,再到深入讲解用户空间与内核空间的区别,以及内核的并发模型,为读者提供了全面的指导。此外,书中还涵盖了模块的...
- **性能瓶颈分析**:讨论了驱动程序中常见的性能问题及其成因。 - **优化策略**:提供了多种性能优化的方法和技术,如缓存机制、多线程编程等。 - **案例研究**:通过具体案例,展示了如何应用这些优化策略来提高...