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

云服务器配置升级后网站仍然慢,如何结合并发量与CPU、内存判断容量瓶颈

发布人:Minchunlin 发布时间:2026-09-29 11:39 阅读量:13
云服务器配置升级后网站仍然慢,如何结合并发量与CPU、内存判断容量瓶颈

云服务器配置越高,网站打开就一定越快吗?不一定。升级配置只能增加可用的计算资源,不能自动消除慢查询、请求排队、应用串行处理、内存回收或其他依赖造成的等待。如果网站原本的瓶颈不在 CPU 和内存,升级后打开速度可能几乎没有变化;如果并发量和请求量持续增长,升级也可能只是把问题推迟一段时间。

实际判断时,不能只看云服务器的规格名称,而要把“网站慢”拆成几组可以观测的数据:同时处理多少请求、每秒进入多少请求、CPU 是否持续繁忙、内存是否出现压力,以及数据规模增长后是否改变了请求处理时间。

先明确要测什么

“访问人数”“并发连接数”和“请求量”不是同一个指标。

  • 访问人数:一段时间内访问网站的用户数量。
  • 并发量:同一时刻正在建立连接、等待处理或尚未返回的请求数量。
  • 请求量:单位时间内收到的请求数量,通常可以按每秒请求数或每分钟请求数统计。
  • 响应时间:请求从发出到收到响应所花费的时间。
  • 资源使用率:CPU、内存以及等待状态的变化。

一个用户打开页面时,可能同时触发页面、样式表、脚本、图片和接口请求,因此用户数不等于并发请求数。可以用下面的关系做初步估算:

平均并发请求数 ≈ 平均每秒请求数 × 平均响应时间(秒)

例如,请求量没有明显增加,但页面平均响应时间变长,并发请求数同样可能上升,最终表现为网站越来越慢。因此,不能只看请求量,还要结合响应时间和资源状态判断。

在升级前满足这些最低条件

开始判断容量前,至少要准备以下信息:

  • 当前云服务器的逻辑处理器数量、内存容量和实际运行规格;
  • 网站高峰期的大致访问时间段;
  • Web 访问日志、应用日志或现有监控数据;
  • 一个固定的测试页面或健康检查地址;
  • 最近一次配置变更前后的响应时间对比;
  • 具备恢复旧配置、恢复旧规格和停止测试的权限;
  • 配置文件和重要数据已经完成备份。

如果只有“用户反馈变慢”,没有任何请求量、响应时间和资源记录,不建议直接升级到更高配置。此时最多只能说明问题存在,不能说明 CPU 或内存就是容量瓶颈。

测试地址应尽量固定,测试时保持访问路径、请求参数和测试客户端一致。不要在没有授权的情况下对生产网站进行高并发压力测试,也不要在业务高峰突然提高测试强度。

第一步:先区分连接慢、处理慢和内容返回慢

可以先用单次请求记录基础响应时间。将示例地址替换为实际网站地址:

curl -sS -o /dev/null \
  -w 'code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' \
  https://www.example.com/

重点关注三个结果:

  • connect:建立连接所需时间;
  • ttfb:收到第一字节所需时间,也就是首字节响应时间;
  • total:整个请求完成所需时间。

如果 ttfb 明显偏高,通常说明请求已经到达服务端,但在应用处理、数据读取、请求排队或其他依赖上等待较久。此时仅增加内存,未必有效。

如果 ttfb 正常,但 total 明显偏高,可能是返回内容较大、页面资源较多,或者某些资源请求耗时较长。应继续拆分页面请求,而不是直接把所有问题归因于 CPU。

如果不同时间反复测试,只有高峰期变慢,平时正常,那么并发量、请求排队和资源峰值更值得优先检查。

第二步:统计并发量和请求量

查看当前连接状态

在 Linux 服务器上,可以先执行:

ss -s

该命令可以查看当前 TCP 连接的大致情况。它只能反映连接状态,不能直接等同于正在执行的应用请求。长连接、空闲连接和正在处理的请求需要结合 Web 服务日志或应用监控进一步区分。

如果已经部署了请求状态监控,应重点记录以下数据:

  • 当前活动请求数;
  • 请求进入速率;
  • 请求完成速率;
  • 平均响应时间和较慢请求比例;
  • HTTP 错误数量;
  • 请求是否出现排队。

没有监控时,可以从现有访问日志统计请求量。下面的命令适用于常见的、带有标准时间字段的访问日志示例,实际日志路径和格式必须先核对:

awk -F'[' '{split($2,a,":"); print a[1] ":" a[2] ":" a[3]}' /var/log/nginx/access.log \
  | sort | uniq -c | sort -nr | head

如果日志格式不同,或者日志已经轮转,这条命令的结果可能不准确。不要直接根据一个不完整的日志文件推断全天峰值,应确认统计时间范围,并分别查看正常时段和业务高峰时段。

请求量统计只能回答“进来了多少请求”,还要和响应时间一起看。可以用下面的方式理解:

观察结果更可能说明什么下一步
请求量上升,并发量上升,CPU持续繁忙计算资源接近上限检查CPU是否为主要瓶颈,再考虑增加计算资源
请求量变化不大,但响应时间变长单个请求处理变慢或出现排队检查慢请求、数据访问和应用处理链路
连接数很多,但活动请求不多可能存在长连接或空闲连接不要把连接数直接当成CPU需求
高峰期错误数和等待时间同时上升现有容量无法稳定覆盖峰值进行受控扩容或降低单请求资源消耗
请求量、CPU、内存都正常,但首字节时间很高瓶颈可能不在当前服务器资源检查应用内部等待和依赖,不要盲目升级规格

第三步:判断CPU是否真的成为瓶颈

先记录服务器的处理器数量和当前负载:

nproc
uptime

再观察一小段时间内的资源变化:

vmstat 1 5

如果系统没有 vmstat,可以使用现有监控,或执行:

top

还可以查看当前占用CPU较高的进程:

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head

判断 CPU 容量时,不要只看某一秒的使用率,应该观察网站高峰期的连续变化:

  • CPU 使用率持续偏高,同时请求量和并发量也处于高位;
  • vmstat 中用户态和系统态占用明显增加;
  • 运行队列长期偏高,且负载水平接近或超过可用逻辑处理器数量;
  • 响应时间、排队时间随CPU升高而同步恶化;
  • 内存仍然充足,交换活动不明显。

这些条件同时成立时,才更接近“CPU容量不足”。

如果只是某个进程短时间占用CPU较高,但请求量很低,可能是定时任务、单个慢请求、程序循环或异常任务。此时直接升级云服务器,往往不能解决根因。

还要注意负载值不能单独代表CPU不足。负载升高也可能来自等待数据读取或其他资源。需要结合 vmstat 中的等待指标、应用日志和请求响应时间判断。

第四步:判断内存是否成为瓶颈

执行:

free -h

重点查看 available、交换区使用情况,以及高峰期是否持续变化。Linux 会使用部分空闲内存作为缓存,因此不能仅凭 used 数值较高就认定内存不足。

内存压力通常表现为:

  • available 在业务高峰期持续下降;
  • 交换区出现持续读写,而不是仅有历史使用记录;
  • 应用进程频繁被回收或重启;
  • 请求量上升后响应时间突然变长;
  • CPU没有明显饱和,但系统整体出现等待;
  • 进程内存持续增长,经过较长时间仍不释放。

可以用下面的命令观察交换活动:

vmstat 1 5

关注 si 和 so。如果在高峰期持续出现交换读入和写出,同时响应时间上升,内存容量不足的可能性较高。

查看进程内存排序:

ps -eo pid,comm,%mem,rss --sort=-%mem | head

如果某个应用进程的内存持续增长,应该先确认是否存在缓存失控、任务堆积或内存泄漏,再决定是否升级内存。增加内存可能暂时延长故障出现时间,但不会消除进程本身的问题。

第五步:把数据规模纳入容量判断

网站数据规模增长后,影响的不只是磁盘占用,还可能改变请求处理时的内存和CPU消耗。

需要关注:

  • 数据记录增长后,原本很快的页面是否开始变慢;
  • 高峰期是否出现更多数据读取和排序操作;
  • 应用进程的工作集是否随数据量增加而扩大;
  • 缓存命中情况是否下降;
  • 同一请求返回的数据量是否变大;
  • 数据处理是否造成CPU占用或内存占用明显上升。

如果数据规模增加后,CPU和内存都没有明显异常,但首字节时间持续增加,容量瓶颈可能位于数据处理路径,而不是云服务器规格本身。此时应先定位具体慢请求和数据访问过程,再决定是否增加资源。

数据规模还会影响未来的增长空间。不能只按照当前平均访问量配置服务器,还应记录历史高峰、数据增长速度和业务活动带来的波动。没有这些数据时,不应直接承诺某个配置能够承载固定用户数或固定请求量。

用最小方案确定当前是否需要升级

最小方案的目标,不是购买更高规格,而是在已知业务峰值下,让网站可以稳定运行,并保留合理的增长空间。

可以按以下顺序判断:

  1. 先记录当前规格下的正常时段和高峰时段数据。
  2. 将请求量、并发量、响应时间、CPU和内存放在同一时间轴上比较。
  3. 找出最先达到压力的指标。
  4. 只针对最先出现瓶颈的资源做调整。
  5. 变更后重新进行同口径验证,不能只看升级后的规格名称。

不同瓶颈对应的最小调整方向如下:

主要瓶颈典型表现优先判断
CPU容量不足并发和请求量上升时,CPU持续繁忙,响应时间同步变长增加计算资源或减少单个请求的计算量
内存容量不足可用内存下降,交换活动增加,应用进程变慢或重启增加内存或降低进程、缓存和请求的内存占用
请求处理效率不足CPU和内存未到高位,但某些请求持续耗时定位慢请求、应用处理和数据访问过程
并发处理能力不足活动请求堆积,单个请求不一定很耗资源检查应用并发设置、请求排队和连接管理
数据规模带来的延迟数据增长后同类请求逐渐变慢观察数据处理路径和工作集变化,不先假设是规格不足

应用的并发进程数、线程数或工作进程数不能盲目调大。过高的并发设置可能让CPU上下文切换增加,或者让每个进程分摊更少的内存,最终出现更严重的排队和交换。调整前应记录原值,逐项修改,并保留恢复方式。

可选的请求耗时记录

如果现有监控没有记录请求耗时,而网站使用了Nginx,可以在确认配置文件位置后增加请求耗时日志。下面只是常见配置示例,必须放在Nginx的 http 配置上下文中,不能直接放到任意位置:

log_format timing_v1
    '$remote_addr "$request" '
    'status=$status request_time=$request_time '
    'upstream_response_time=$upstream_response_time';

access_log /var/log/nginx/access_timing.log timing_v1;

修改前应完成以下操作:

  1. 通过 nginx -T 查看当前实际配置,确认已有日志路径和配置上下文。
  2. 备份包含 http 配置的文件,不要覆盖原文件。
  3. 只增加日志格式和日志输出,不要同时修改连接数、进程数等其他参数。
  4. 使用 nginx -t 检查配置语法。
  5. 语法检查通过后,再按现有服务管理方式平滑加载配置。
  6. 确认新日志能够产生,再开始统计请求耗时。

如果检查失败、日志无法写入或加载后网站出现异常,应立即删除新增配置、恢复备份文件,再次执行 nginx -t,确认通过后恢复原配置。日志量增加也会占用存储空间,应设置已有的日志保留和轮转策略,不能长期无限增长。

变更后的成功验证

升级配置或调整并发参数后,不要只确认网站“能打开”,至少要完成以下验证:

  • 使用相同测试地址和相同测试方式重复请求;
  • 比较变更前后的首字节时间、总响应时间和错误状态码;
  • 在正常时段和业务高峰分别观察;
  • 记录CPU是否仍然持续饱和;
  • 记录可用内存和交换活动是否改善;
  • 观察活动请求是否仍然堆积;
  • 检查应用是否出现重启、超时或异常日志;
  • 确认数据写入、登录、表单提交等关键功能没有受到影响。

压力测试应采用逐步增加并发的方式,每次只改变一个变量。不要同时升级云服务器、修改应用工作进程、调整缓存和更换请求处理方式,否则即使结果变好,也无法判断是哪项变更起作用。

如果升级后CPU和内存使用率下降,但首字节时间几乎没有改善,说明原瓶颈可能不在这两项资源;如果CPU下降而响应时间仍然很高,则应继续检查慢请求和数据处理;如果内存增加后交换活动消失,但响应时间没有恢复,可能还存在应用处理或请求排队问题。

失败处理与回滚边界

每次变更都应保留以下记录:

  • 变更前的服务器规格和关键配置;
  • 变更前的请求量、并发量、响应时间、CPU和内存数据;
  • 变更时间和具体修改项;
  • 变更后的错误日志和监控结果;
  • 恢复旧配置或旧规格的操作方式。

出现以下情况时,应停止继续加压并进入回滚判断:

  • 错误率持续上升;
  • 关键页面无法打开;
  • 应用进程频繁重启;
  • 内存交换活动明显加重;
  • 响应时间比变更前更差;
  • 日志量异常增加或磁盘空间快速下降。

如果只是日志配置或应用参数变更,应先恢复原配置并验证语法,再平滑加载。涉及服务器规格调整时,应根据业务负载选择低峰期恢复,避免在高峰期直接降配。涉及数据写入的操作不能通过简单回滚规格解决,必须先确认数据完整性和备份状态。

真正需要升级的条件,是在目标并发和目标请求量下,某一项资源持续接近上限,并且已经对响应时间、错误率或请求排队产生可重复影响。CPU、内存都没有压力时,配置继续提高通常不会带来等比例的打开速度提升;当CPU或内存成为明确瓶颈时,才应针对对应资源增加容量,并用同一组请求和监控数据验证升级是否有效。

目录结构
全文