高并发是大型架构核心,下面我详解高并发核心瓶颈@mikechen
高并发系统
在高并发系统中,很多工程师都会问一个问题:系统性能瓶颈到底在哪里?
是 CPU 算力不够?还是内存容量不足?亦或是磁盘 I/O 撑不住?

如果要搞定,你需要了解整个服务流程。
一个服务请求,从进入系统到返回结果,大致会经历以下流程:
请求到达 ↓ 网络接收 ↓ CPU处理业务逻辑 ↓ 访问内存数据 ↓ 访问磁盘或数据库(I/O) ↓ 返回响应
因此,系统性能的核心依赖于三大资源:
CPU:计算能力,看 CPU:使用 top、vmstat、sar,看 CPU 总利用率;
内存:数据访问速度,使用 free、vmstat、/proc/meminfo,看 available、swap 使用情况;
I/O:数据读写能力,使用 iostat、sar -d,关注 IOPS、吞吐量、await、%util 是否长时间很高。
一旦其中任何一个资源达到上限,就会成为系统瓶颈。
为什么 I/O 更容易成为“第一杀手”
CPU 的时延是纳秒级,内存访问是十几到几十纳秒。
而网络、和磁盘 I/O 往往是毫秒级,中间有 6 个数量级的鸿沟,这使得 I/O 阻塞在高并发场景中天然更致命。

高并发系统追求的是整体吞吐和响应时间,只要有部分请求在磁盘或网络等待。
线程就会堆积,连接数爆炸,最后表现出来就是“全站都慢了”。
一个典型情况:TPS 上到 10 万级以后,CPU 利用率看起来并不高。
但 load average 暴涨,iowait 居高不下,RT 长尾严重,这基本就是 I/O 已经吃不消的典型信号。
CPU:真瓶颈很少见,但“伪 CPU 瓶颈”很多
CPU 真正打满,一般出现在:复杂计算(加解密、大量压缩)。

频繁上下文切换(线程太多)、锁竞争严重等场景。
很多“看起来 CPU 很高”的场景,其实是:缓存 miss、频繁内存拷贝、系统调用过多。
或者在忙轮询等待 I/O,根因仍然:在数据移动、和 I/O 上。
内存:一旦不够,就会“间接”变成 I/O 杀手
高并发场景下,只要内存足够。
内存本身很少成为第一瓶颈,但内存不足会触发频繁的页换入换出(swap)。

把所有热点都推向磁盘 I/O,系统瞬间雪崩。
数据库、缓存、消息队列这些组件一旦内存配置不合理。
会导致 buffer pool / page cache 命中率降低,更多请求直接打到磁盘,把 I/O 的压力放大数倍。
可以粗略理解为:内存的主要价值是在“挡在 I/O 前面”。
内存够用时,你在对抗 I/O,内存不够用时,你在被 I/O 收割。