上一篇 下一篇 分享链接 返回 返回顶部

40核80线程香港服务器能撑多少并发访问?结合CPU、响应时间和I/O判断

发布人:Minchunlin 发布时间:2026-10-05 20:29 阅读量:28

40核80线程不能直接换算成固定的“可承载并发数”。以A5数据香港Gold 6230服务器为例,双路 Gold 6230合计40核80线程,配备128GB DDR4-2666内存和960GB NVMe PCIe Gen4 SSD,但实际并发上限还会受到25Mbps CN2带宽、100Mbps国际带宽、页面大小、响应时间、数据库查询和应用连接池的共同影响。对于经过缓存的轻量页面,瓶颈可能先出现在带宽;对于动态站点,CPU、应用线程池或数据库往往会先达到上限。

可以先用一个可计算的参考场景理解量级:如果访问主要使用25Mbps出口,单次响应约20KB,按带宽利用率70%估算,理论可处理约109次请求/秒;如果响应时间为300毫秒,同时处于等待响应状态的请求约为33个。若单次响应扩大到100KB,可用处理能力约降至22次请求/秒,对应请求并发约7个。这里的“33个”或“7个”是正在处理的请求数,不是网站后台显示的在线人数。若每个在线用户平均10秒发起一次请求,100次请求/秒可能对应约1000个活跃会话;如果用户持续刷新、一个页面还包含多个图片和脚本,请求量则会迅速增加。

先把“并发访问”换成可测的数字

“并发”至少包含三种容易混淆的概念:

  • 连接并发:同时保持的TCP连接或Keep-Alive连接数量。
  • 请求并发:同一时间正在等待服务器处理或返回的HTTP请求数量。
  • 在线会话数:在一段时间内打开网站、但不一定正在发起请求的用户数量。

一台服务器可以保持数千个空闲连接,但这并不代表它正在同时执行数千个数据库查询。反过来,几百名用户如果在同一秒刷新页面,并且每个页面需要加载多个接口,也可能产生远高于在线人数的瞬时请求量。

性能测试时,应优先记录请求速率和响应时间:

请求并发数 ≈ 请求速率 × 平均响应时间

例如:

  • 50次请求/秒,平均响应时间200毫秒,请求并发约为10;
  • 100次请求/秒,平均响应时间500毫秒,请求并发约为50;
  • 100次请求/秒,平均响应时间2秒,请求并发约为200。

第二种情况并不一定比第一种“承载能力高”,因为响应时间已经明显恶化。真正的容量点通常是:在错误率可接受、P95/P99响应时间没有持续上升、队列不持续堆积的前提下,能够稳定运行的最大请求速率。

用带宽先做一轮容量估算

香港Gold 6230服务器提供25Mbps CN2和100Mbps国际带宽。实际判断时,不能把两者简单相加,而应按照访问流量实际使用的出口分别测试。流量主要经过25Mbps出口时,出口带宽会成为一个需要优先验证的条件;经过100Mbps国际带宽时,带宽上限提高,但CPU、应用和数据库可能更早成为瓶颈。

25Mbps按十进制换算:

  • 25Mbps ÷ 8 = 3.125MB/s;
  • 按70%的可用比例估算,约为2.1875MB/s;
  • 这里的70%只是用于预留协议开销、突发流量和其他后台流量的参考比例,不是固定标准。

下表使用25Mbps出口、70%可用比例和300毫秒平均响应时间进行估算。响应大小按十进制计算,例如20KB按20,000字节计算。数据仅用于建立容量模型,不代表某个站点的实测结果。

单次平均响应大小满带宽理论请求速率按70%利用率估算的请求速率300毫秒时的请求并发
20KB约156次/秒约109次/秒约33
100KB约31次/秒约22次/秒约7
500KB约6次/秒约4次/秒约1
1MB约3次/秒约2次/秒少于1

计算方式是:

  • 20KB场景:2,187,500字节/秒 ÷ 20,000字节 ≈ 109次/秒;
  • 100KB场景:2,187,500字节/秒 ÷ 100,000字节 ≈ 22次/秒;
  • 500KB场景:2,187,500字节/秒 ÷ 500,000字节 ≈ 4次/秒。

实际响应还包括HTTP头、TLS开销、请求数据、图片和脚本等内容。如果一个页面的HTML只有30KB,但同时加载10个资源,总传输量可能达到数百KB,计算时应使用一次完整页面访问的总流量,而不是只看HTML文件大小。

如果流量确实稳定经过100Mbps国际带宽,在其他条件相同的情况下,单纯由带宽计算出的速率大约是25Mbps场景的4倍。但这只说明网络出口的理论空间变大,并不表示应用和数据库也能同步提高4倍。

建立同一时间窗口,避免单点指标误判

测试时不能先看CPU,再过几分钟查看磁盘,最后凭印象判断。应在同一个时间窗口内同时记录以下数据:

建立同一时间窗口,避免单点指标误判配图

层面重点指标需要观察的关联变化
CPU总使用率、单核使用率、用户态、内核态、iowait、运行队列CPU上升时,P95和队列是否同步上升
内存available、swap、major page fault、OOM记录内存压力出现时,响应时间和I/O等待是否增加
磁盘IOPS、吞吐、await、队列深度、util、iowait磁盘队列增长是否与数据库慢查询同时出现
网络入站/出站Mbps、丢包、重传、连接数、RTT带宽接近上限时,响应时间是否发生阶跃式上升
应用RPS、P50/P95/P99、工作线程、连接池、排队请求、4xx/5xx线程池或连接池耗尽是否先于CPU饱和
数据库活跃连接、锁等待、慢查询、事务耗时、读写延迟数据库等待是否占据请求总耗时

在Linux环境中,可以用以下命令进行基础观察。命令本身只读取监控信息,不会修改服务配置:

mpstat -P ALL 1
vmstat 1
iostat -xz 1
sar -n DEV 1
ss -s

如果需要观察某个应用进程,可以使用进程ID替换:

pidstat -u -r -d -p  1

这些命令要和压测工具的时间戳对应起来。例如,压测工具显示14:00:00至14:10:00的P95响应时间,就应查看服务器同一时间段内的CPU、磁盘、网络和数据库数据,而不是只看测试结束后的瞬时状态。

CPU:40核80线程不等于应用能用满全部核心

双路 Gold 6230提供较多逻辑线程,适合多请求并行、多个应用进程和数据库混合负载。但应用是否能利用这些核心,取决于请求是否可以并行执行。

CPU更可能成为瓶颈时,通常会同时出现以下现象:

  • 多数物理核心或逻辑核心长期接近满载;
  • 运行队列持续增长;
  • RPS增加后,P95、P99响应时间明显上升;
  • 网络带宽尚未接近上限,磁盘队列也没有明显堆积;
  • 降低请求速率后,响应时间和运行队列较快恢复。

还要特别注意“总CPU使用率不高,但单个核心已满”的情况。某些应用存在单线程处理、全局锁、序列化任务、单连接数据库操作或单个事件循环阻塞,此时总CPU可能只有20%至30%,但一个核心已经持续100%。如果P95响应时间和该核心使用率同步上升,不能因为总CPU低就排除CPU或应用执行路径瓶颈。

相反,如果CPU使用率达到较高水平,但P95仍然稳定、运行队列没有持续增长、错误率没有变化,说明服务器可能仍处于可用区间。是否继续加压,应结合项目的响应时间目标,而不是只依据一个CPU百分比。

内存:看压力和换页,不只看“已用多少”

128GB内存能够为应用、数据库缓存和系统页缓存提供较大空间,但“已用内存高”本身不能直接说明内存不足。Linux会将空闲内存用于文件缓存,因此应重点查看:

  • available是否持续下降;
  • 是否出现swap in、swap out;
  • major page fault是否增加;
  • 应用是否发生OOM;
  • 响应变慢时,磁盘读延迟是否同时升高。

典型的内存瓶颈表现是:随着并发上升,available持续下降,开始出现换页,随后磁盘读写和iowait增加,P95响应时间变长。此时CPU可能并不高,但应用处理速度已经受到内存访问和换页影响。

如果内存仍有余量,没有明显换页,应用延迟却快速增加,就不应优先把问题归因于内存。应继续检查数据库锁、磁盘队列、应用线程池和网络出口。

磁盘和I/O:NVMe快,但数据库负载仍可能排队

960GB NVMe PCIe Gen4 SSD可以降低随机读写延迟,但磁盘性能最终仍取决于读写模式。以下负载对I/O更敏感:

  • 大量数据库随机读;
  • 高频事务提交和日志刷盘;
  • 大量小文件访问;
  • 数据库检查点或批量写入;
  • 应用日志突然集中写入;
  • 缓存未命中导致的持续磁盘读取。

判断I/O瓶颈时,应把await、util、队列深度和iowait放在一起看。单独看到磁盘吞吐较高,并不代表磁盘一定是瓶颈;如果吞吐不高但队列和等待时间持续增加,同样可能存在大量小块随机I/O。

一个常见的联动模式是:

  1. 压测并发增加;
  2. 数据库读写请求增加;
  3. 磁盘队列深度和await同步升高;
  4. 应用线程处于等待状态;
  5. CPU总使用率没有明显上升,但P95和P99快速变差。

这类结果更接近数据库或存储I/O瓶颈,而不是CPU不足。若降低并发后磁盘队列迅速恢复,且慢查询或事务等待同步减少,判断会更可靠。

网络:25Mbps可能比40个核心更早达到上限

当站点主要使用25Mbps出口时,应持续观察出站流量。网络瓶颈的典型组合是:

  • 出站流量接近25Mbps;
  • CPU和磁盘仍有明显余量;
  • RPS继续增加的幅度变小;
  • P95响应时间突然拉长;
  • 出现超时、连接重置或错误率上升;
  • 降低响应体积后,响应时间明显改善。

如果CPU只有40%左右,磁盘await也正常,但出站流量已经贴近带宽上限,此时增加CPU核心并不能解决问题。应先核对页面总大小、静态资源数量、接口返回字段和重复传输内容。

网络测试还要注意访问方向。同一台香港服务器的25Mbps CN2和100Mbps国际带宽不是一个可以任意叠加的总数。应分别使用与实际业务相近的访问路径测试,并记录实际出站接口、RTT、重传和错误率。网络延迟还受到访问路径和时段影响,不能把某一次压测的延迟直接视为长期固定值。

应用和数据库:CPU不高时,瓶颈可能在队列里

应用层常见的限制包括:

  • 工作进程或线程数过少;
  • 连接池上限过低;
  • 请求在应用队列中等待;
  • 同步调用占用工作线程;
  • 缓存未命中后集中访问数据库;
  • 单个慢接口拖住整个请求链路;
  • 日志、序列化或模板渲染消耗过多时间。

如果应用工作线程已经全部占用,但CPU、内存和网络仍没有达到高位,通常应检查应用队列和连接池,而不是立即增加压测并发。继续加压只会让等待时间增长。

数据库瓶颈通常可以通过以下联动来识别:

  • 数据库活跃连接持续接近连接池上限;
  • 锁等待或事务等待时间上升;
  • 慢查询数量增加;
  • 数据库磁盘读取或日志写入增加;
  • 应用请求耗时主要集中在数据库调用阶段;
  • CPU并未跑满,但接口P95已经持续恶化。

例如,一个接口平均需要执行3次查询,其中一次查询在低并发时只需10毫秒,在高并发时因锁等待增加到300毫秒,那么服务器即使还有大量CPU余量,整体响应时间也会明显变差。此时将40核80线程理解为“还可以继续承载同样数量的动态请求”是不准确的。

一个可复现的模拟结果

下面构造一个便于理解的参考场景:页面和接口平均响应体20KB,流量走25Mbps出口,接口已开启Keep-Alive,数据库使用的是具有代表性的读请求,测试结果为模拟数据,不是该服务器的实际监控结果。

一个可复现的模拟结果配图

目标请求速率CPU总使用率出站流量P95响应时间错误率现象解释
40次/秒18%约6.8Mbps180ms低于0.1%各层都有余量
80次/秒29%约13.7Mbps230ms低于0.1%处理稳定
120次/秒43%约20.5Mbps390ms约0.2%接近网络和应用压力区间
140次/秒47%约24.2Mbps1.2秒约2.3%网络接近上限,队列开始堆积

如果只看CPU,140次/秒似乎还没有达到极限;但结合出站流量、P95和错误率,可以判断瓶颈更接近25Mbps出口,而不是CPU。继续增加并发,可能只会让请求排队和超时变多。

在120次/秒、P95约390毫秒的情况下,平均请求并发大约是:

120 × 0.39 ≈ 47个请求

如果这120次/秒来自1200个在线会话,意味着每个会话平均约10秒发起一次请求。若每个会话平均5秒发起一次请求,同样的服务器处理能力只能对应约600个会话。由此可见,“能撑多少在线用户”必须连同访问频率、页面大小和接口数量一起描述。

建议采用阶梯式压测,而不是一次拉满

1. 固定测试环境和业务样本

测试环境至少应明确以下内容:

  • 操作系统、Web服务、运行时和数据库版本;
  • 使用的域名和实际访问路径;
  • 测试是否经过TLS;
  • 页面或接口的平均响应大小;
  • 静态资源是否命中缓存;
  • 数据库是读请求、写请求还是混合请求;
  • 测试数据量和生产数据量是否接近;
  • 是否启用日志、监控和定时任务。

负载发生器最好放在独立机器上,并通过与实际访问相近的路径发起请求。不要在被测服务器本机使用回环地址进行测试后,就把结果当成真实网络访问能力。

2. 先做低并发基线

开始时使用较低请求速率,持续5至10分钟,记录空载和低负载基线。随后逐级增加请求速率,例如:

  1. 10次/秒;
  2. 20次/秒;
  3. 40次/秒;
  4. 80次/秒;
  5. 继续增加,直到P95、错误率或某个资源指标达到业务边界。

每个阶梯至少保持5至15分钟,避免只观察刚加压后的瞬时结果。对于有缓存预热过程的站点,应分别记录冷缓存和热缓存结果。

使用压测工具时,可以采用类似下面的示例。该命令只应针对自有或已获授权的测试地址执行:

wrk -t8 -c200 -d10m --latency https://test.example.com/

这里的线程数、连接数和持续时间只是示例,需要根据负载发生器的性能和业务目标调整。若负载发生器自身CPU、网络或连接数已经达到上限,测试结果不能代表被测服务器的能力。

3. 同时记录P50、P95、P99和错误率

平均响应时间容易掩盖长尾请求。例如,1000个请求中有990个只需100毫秒,10个请求耗时5秒,平均值可能仍然不高,但用户已经感受到明显卡顿。

建议至少记录:

  • RPS或吞吐量;
  • P50、P95、P99响应时间;
  • 连接建立时间和TTFB;
  • 4xx、5xx、超时和连接错误;
  • 应用队列长度;
  • 数据库连接和锁等待;
  • CPU单核与总量;
  • 内存换页;
  • 磁盘await和队列;
  • 实际出站Mbps。

项目如果没有现成SLO,可以先把“P95不超过目标值、错误率低于业务允许范围、队列不持续增长、资源指标留有余量”作为临时通过条件。500毫秒、1秒或其他阈值应根据页面类型和业务要求设定,不宜对所有站点使用同一个固定数字。

结果如何排除替代解释

当测试出现响应变慢时,可以按以下组合判断:

观察到的组合更可能的原因需要排除的替代解释
多数核心高、运行队列增长、网络和磁盘正常CPU或应用计算瓶颈检查是否只有单核满载
总CPU不高,但一个核心满载,P95上升单线程、锁或串行任务检查应用线程模型和热点函数
available下降、swap和major fault增加内存压力排除数据库缓存主动释放造成的短时变化
iowait、await、磁盘队列同步增长存储或数据库I/O检查是否为日志突发写入
出站接近25Mbps,CPU和磁盘有余量网络出口瓶颈确认流量是否走了预期出口
应用工作线程满、请求队列增长,数据库正常应用层并发配置或代码等待检查负载发生器是否能持续发压
数据库连接、锁等待、慢查询同步增加数据库瓶颈区分查询本身慢和磁盘等待
压测端CPU或网络先满测试端瓶颈更换或增加负载发生器后重测

如果只看到“CPU 90%”,但没有同时看到响应时间、RPS和错误率,就不能判断这是有效容量上限。CPU可能是正常的后台任务,也可能是压测工具或日志进程消耗造成的。只有当多个指标在同一时间窗口内形成一致变化,判断才更可信。

用测试结果换算实际并发规模

完成测试后,可以按下面的顺序换算:

用测试结果换算实际并发规模配图

  1. 找到满足业务响应时间和错误率要求的最大稳定RPS;
  2. 记录该RPS下的平均响应时间和P95;
  3. 用“请求速率 × 平均响应时间”估算同时处理中的请求数;
  4. 根据用户平均请求间隔,换算在线会话数;
  5. 对突发流量预留余量,不把临界点当成日常运行值。

例如,某个动态接口在80次/秒时平均响应时间250毫秒,P95为500毫秒,错误率低于目标值,且CPU、内存、磁盘、网络和数据库队列都没有持续增长,那么:

  • 平均请求并发约为80 × 0.25 = 20;
  • 按每个会话平均10秒发起一次请求,理论上约对应800个活跃会话;
  • 如果页面还有图片、脚本和多个接口,应把这些请求全部计入;
  • 如果流量存在秒级突发,应以峰值请求速率而不是平均请求速率作为容量依据。

因此,针对40核80线程香港服务器,更稳妥的表达不是“固定支持多少并发”,而是:

  • 小响应、缓存命中、请求频率较低的站点,25Mbps出口下通常先表现为几十到一百多次请求/秒的网络容量问题;
  • 100KB左右的动态响应,网络可用请求速率会明显下降,应用和数据库也可能更早成为限制;
  • 大量写入、复杂查询或锁竞争场景,即使CPU和内存规格较高,也可能只有较低的稳定RPS;
  • 在线会话数可以达到请求并发的数倍甚至更高,但必须建立在明确的用户请求间隔和页面资源模型上。

复测时要同时改变一个变量

第一次测试后,不要同时修改缓存、数据库、连接池和带宽再重新压测,否则无法知道性能变化来自哪里。建议每次只改变一个条件,例如:

  • 只改变页面响应大小;
  • 只切换热缓存和冷缓存;
  • 只调整应用工作线程;
  • 只改变数据库查询比例;
  • 只改变目标出口或访问路径;
  • 只增加请求速率阶梯。

每个场景至少重复测试数次,并记录测试时间、测试端位置、请求体积、缓存状态和版本信息。若同一配置下结果波动较大,应先检查后台任务、定时备份、日志切割、数据库维护或测试端资源,而不是直接把最好的一次结果作为容量上限。

下一次观察时,建议把这组指标放在同一张时间序列表中:RPS、P95/P99、错误率、出站Mbps、CPU单核与总量、iowait、内存换页、磁盘await与队列、应用排队数、数据库锁等待。只有这些指标在同一时间窗口内互相印证,才能判断40核80线程究竟是仍有计算余量,还是已经被网络、I/O、应用或数据库中的某一环节限制。