在 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 无法分配
相关推荐
《电脑维护与数据恢复:深度解析系统性能瓶颈的优化策略》 在当今信息化社会,电脑已经成为我们生活和工作的重要工具,然而,随着使用时间的增长,系统可能会出现各种性能问题,如运行缓慢、卡顿、频繁崩溃等。这些...
在分布式系统性能瓶颈分析中,自适应遗传算法通过逐步增加系统负载压力,利用遗传算法中染色体的概念,将服务器的关键性能指标值组合成染色体,构建系统适应度函数。适应度函数在这里反映了这些关键性能指标值变化对...
《系统性能瓶颈分析工具IronTrackSQL深度解析》 在IT领域,系统性能优化是一项至关重要的工作,而有效的性能瓶颈分析工具则是实现这一目标的关键。本文将深入探讨名为IronTrackSQL的系统性能瓶颈分析工具,旨在帮助...
MOMO陌陌高永芝在2017PHP全球开发者大会上做了主题为《复杂PHP系统性能瓶颈排查及优化》的演讲,就PHP系统数据筛选及统计,可视化性能指标,搞笑优化方案做了深入分析。
《BOSS数据库系统性能瓶颈分析和定位》 BOSS数据库系统在月结销账工作中扮演着至关重要的角色,需要在限定时间内处理全省2000多万用户的账单费用计算。然而,近期系统出现了性能下降的问题,原本2到3小时的运行时间...
一款能分析系统性能瓶颈的优化软件。它通过对系统全方位的诊断,找到系统性能的瓶颈所在,然后有针对性地进行修改、优化。此外它还具有间谍软件和恶意软件扫描清除功能,也能将你的隐私信息从电脑中抹除。
随着业务规模的不断扩大和技术复杂性的增加,如何有效地识别并解决系统性能瓶颈成为了一个关键课题。本文将深入探讨如何通过一系列的方法和技术手段来找出并解决这些性能问题。 #### 二、性能测试与分析概述 性能...
本文将介绍如何结合这两款工具来定位系统性能问题。 首先,JProfiler是专为Java开发的系统提供性能监控的工具。它可以实时监控内存使用、垃圾回收、线程状态等,帮助开发者深入理解JVM的运行状况。要使用JProfiler...
Jmeter 各种性能测试+性能瓶颈解决方案
在系统性能分析方面,Advanced WindowsCare Personal 提供了强大的功能来识别和解决可能导致性能瓶颈的问题。这些功能包括但不限于: 1. **系统清理**:软件能够扫描并清除系统中的垃圾文件,如临时文件、日志文件...
本专题主要关注RAC数据库集群服务器系统的性能瓶颈分析,以下将详细介绍其中的关键知识点。 首先,CPU 和 wait time 的调节是性能优化的基础。在RAC环境中,分析CPU time 和 wait time 的比例至关重要。wait time ...
网络游戏是当今社会中备受欢迎的一种娱乐方式,而随着游戏复杂度的提高,对网络系统性能的需求也随之攀升。通信行业的网络系统往往面临着巨大的压力,尤其是在处理大规模并发、高延迟敏感的游戏数据传输时,性能瓶颈...
* 轻松发现和消除性能瓶颈 * 查找问题代码 * 节省后续硬件及开发投入 * 增加应用发布信心 * 与开发过程集成,改善应用性能 JProbe Suite是一种能节省开发时间、降低开发费用、改善Java应用运行速度及和扩展能力的...
LoadRunner,是一种预测系统行为...接下来给大家讲一下有关在使用JProfiler结合LoadRunner寻找系统性能瓶颈LoadRunner:加压JProfiler:监控1JProfiler是做什么的?JProfiler工具主要用于检查和跟踪系统(限于Java开发
在讲如何定位系统性能瓶颈之前,我们需要了解系统性能的定义和测试。 一、系统性能定义 系统性能的定义非常关键。如果我们不清楚什么是系统性能,那么我们将无法定位性能瓶颈。系统性能可以分为两个方面:...
通过对这些数据的深入挖掘,我们可以发现系统性能瓶颈、资源分配问题以及可能的优化方向。最终,这些分析结果将为系统优化提供依据,确保软件系统在上线后能够满足性能需求,为用户提供流畅、稳定的服务体验。