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

Ubuntu 26.10搭配Kernel 7.3压测,CPU、I/O与响应时间怎么看?

发布人:Minchunlin 发布时间:2026-10-06 10:42 阅读量:19

CPU利用率从70%降到50%,未必说明服务器变快了:线程可能正在等磁盘、等连接,或者请求还没有真正进入服务端。判断Ubuntu 26.10搭配Kernel 7.3的压测表现,应该先看相同业务负载下,有效吞吐量是否提高、P95/P99响应时间是否下降、错误率是否守住目标,再把CPU、内存、I/O、网络和队列放到同一个时间窗口里解释。

Ubuntu 26.10与Kernel 7.3在本文中作为待核验的目标测试组合,不预设它们已经正式发布,也不预设Kernel 7.3是该发行版的默认内核。以下监控数据均为解释判断方法的示例,不代表A5IDC实测结果。真正评估这组版本是否有收益,需要确认实际运行版本、软件包来源与兼容性,并在相同硬件和业务条件下进行对照。

建立观察窗口:先把“同一时间、同一负载”固定下来

服务器性能不是一组静态参数,而是请求从进入系统到完成响应的过程。只看压测结束后的平均CPU或磁盘带宽,容易把预热、稳定运行和过载混在一起。

建议将一次测试分成预热段、稳定段、逐级加压段和恢复段。预热段用于让连接池、应用运行时和缓存进入相对稳定状态;稳定段确认指标是否持续波动;加压段寻找排队开始增长的位置;恢复段观察降载后队列能否排空。测试持续多久,应覆盖业务中有意义的周期,而不是只运行几十秒便宣布结果。

例如,测试一个以数据库查询为主的API,可以每档运行5分钟:前2分钟观察预热,后3分钟统计稳定结果。若数据库检查点、应用垃圾回收或后台任务周期超过这个窗口,就应延长测试,避免恰好避开周期性抖动。

必须同步记录的指标

观察对象建议记录要回答的问题
业务结果发起请求数、完成请求数、成功请求数、超时与其他错误请求是否真正完成,而不是只被发送
响应时间P50、P95、P99及延迟分布大多数请求与慢请求分别发生了什么
CPU用户态、系统态、空闲、steal、各核利用率、运行队列算力是否紧张,还是CPU正在等其他资源
内存可用内存、进程RSS、缺页、swap活动、memory PSI内存压力是否转化成停顿或额外I/O
存储IOPS、吞吐量、读写await、请求队列、io PSII/O服务时间与排队是否恶化
网络与应用队列收发速率、重传、丢包、连接池等待、工作队列请求是否卡在传输或应用内部

其中,P95表示约95%的已统计请求在该时长内完成,P99表示约99%。必须明确统计是否包含超时、是否仅统计成功响应。如果大量慢请求超时后被排除,“成功请求P99”反而可能变好。

采样时间也要对齐。资源指标可按1秒采集,再与业务侧10秒或30秒的统计窗口对照;低请求量场景需要更长窗口,才能让P99具有解释价值。不要直接平均多个窗口的P99,应通过原始样本或可合并的延迟直方图计算整体分位数,同时保留局部窗口,避免隐藏短时尖峰。

把版本组合和环境记清楚

测试开始前,可以用只读命令核验环境:

cat /etc/os-release
uname -r
cat /proc/version
lscpu
lsblk -o NAME,TYPE,SIZE,ROTA,MODEL

/etc/os-release确认发行版,uname -r确认正在运行的内核。仅安装了某个内核软件包,不等于已经启动到该内核;内核版本字符串也不能单独证明软件包来源。

对照测试至少应固定vCPU数量、内存、存储规格、应用版本、数据库数据集、请求比例、TLS设置及压测机位置。虚拟机还需记录CPU steal和云盘性能约束。否则,版本变化与宿主机争用、云盘突发额度变化可能同时发生,无法归因。

CPU变化:利用率下降,是效率提高还是等待增加?

CPU利用率最容易获得,也最容易被误读。对于业务压测,它首先是解释指标,而不是成绩本身。

下面给出一组8 vCPU、16 GiB内存服务器的模拟数据。接口、请求体和数据集保持一致,采用固定到达率发压;“有效吞吐”仅统计符合成功条件的完成请求。

下面给出一组8 vCPU、16 GiB内存服务器的模拟数据示意图

负载档位发起速率有效吞吐CPU利用率I/O读await应用排队长度成功请求P99总错误率
低负载600次/秒599次/秒38%1.2毫秒342毫秒0.1%
中负载1000次/秒998次/秒66%1.5毫秒868毫秒0.2%
高负载1400次/秒1180次/秒54%12毫秒180460毫秒6.0%

高负载阶段CPU从66%下降到54%,但有效吞吐没有跟上发起速率,I/O延迟、队列、P99和错误率同时上升。这组关系更支持“请求受阻于I/O或相关等待”的候选解释,而不是“新版本节省CPU”。

高负载档中,发起量与成功完成量的差额还包含失败请求和观察窗边界上尚未完成的请求,不能全部算成错误。稳定段结束后应继续统计队列排空和最终结果,避免混淆失败与未完成。

什么组合更支持CPU瓶颈?

当加压后有效吞吐趋于平台、CPU可运行线程持续排队、部分或全部核心接近饱和,而I/O等待和外部依赖延迟变化不大时,CPU瓶颈的解释才更有支撑。此时还应看热点线程,而不是只看整机平均值。

8核服务器总体利用率约40%,仍可能有一个关键线程占满单核。单线程处理、锁竞争或某个工作队列分配不均,都可能让服务无法利用剩余算力。进程CPU百分比是否允许超过100%,则取决于工具的归一化方式,比较前要统一口径。

系统态CPU升高也需要联动分析:

  • 系统态CPU与网络包速率、软中断负载同时上升,优先检查网络处理开销。
  • 系统态CPU与上下文切换、线程数量同步上升,优先检查调度、锁竞争或线程过量。
  • steal升高并伴随响应时间抖动,先考虑虚拟化环境的算力争用,不能直接归因于Ubuntu或内核。

一个可用于版本比较的派生指标是“每千次成功请求消耗的CPU秒”。但它也有前提:请求内容、缓存状态、错误率和完成量必须可比,最好使用应用或其cgroup的CPU时间。同样处理1000次成功请求,新组合消耗更少CPU秒,才更接近“处理效率提高”;若吞吐和请求路径已经变了,单看CPU下降没有意义。

I/O与内存联动:磁盘慢,可能是存储排队,也可能是缓存失效

I/O分析需要同时区分数据量、请求数量和完成时延。顺序大块读写可以产生较高吞吐,随机小块读取则可能吞吐不高但IOPS很高。两者不能用同一个“MB/s越高越好”标准判断。

对于数据库接口,业务更关心一次查询是否需要等待存储、等待多久。因此,读写await、请求队列和业务慢请求之间的关系,通常比磁盘带宽峰值更有解释力。

不把磁盘利用率当作统一阈值

iostat中的%util可以反映设备忙碌程度,但不能普遍代表设备已达到性能上限。对于能够并行处理请求的SSD、NVMe和虚拟块设备,接近100%不必然意味着没有余量;低于100%也不能排除延迟问题。

更有解释力的观察是:相近I/O模式下,吞吐或IOPS不再明显增长,await持续升高,请求队列积累,业务P99同步恶化。这支持存储路径发生排队的判断,但仍要检查设备限速、后端争用和应用自身的访问模式。

Linux工具报告的await通常包含块请求排队及服务时间,并不是应用一次数据库调用的完整耗时。应用还可能在连接池、锁、文件系统或日志同步等环节等待,二者不能直接画等号。

把内存压力放进同一条时间线

再看一个模拟过程:稳定阶段数据库读取较少,P99约70毫秒;数分钟后可用内存下降,memory PSI升高,读IOPS增加,随后读await与P99共同上升。

I/O与内存联动:磁盘慢,可能是存储排队,也可能是缓存失效配图

这不一定是“磁盘突然变慢”。更合理的候选解释是缓存被挤出后,原本命中内存的数据开始访问磁盘,使I/O需求增加。

此时可依次核对:

  1. 进程RSS增长的是业务堆内存、数据库缓冲区,还是其他进程。
  2. 可用内存是否下降,是否出现持续的内存压力。
  3. swap换入换出是否活跃,主要缺页是否与存储读取同步。
  4. 数据库或应用缓存命中率是否下降,读取工作集是否扩大。
  5. 读I/O增加以后,才出现磁盘队列和响应时间恶化,还是顺序相反。

“已用内存很高”不是充分证据。Linux会利用空闲内存缓存文件,而swap占用不为零也不代表此刻正在持续换页。应重点看可用内存、实时换页活动与压力趋势。

PSI即压力停顿信息,可观察任务因CPU、内存或I/O资源不足而受阻的时间比例,但它不是CPU利用率,也不是业务延迟。CPU、memory和io PSI不能简单相加得到“总压力”;它们适合帮助定位等待发生在哪类资源上。

响应时间与网络联动:服务器不忙,也可能已经过载

业务响应时间覆盖请求路径上的多个阶段。CPU和磁盘都不紧张,不能证明服务有足够容量:数据库连接池、工作线程、锁或外部接口都可能形成瓶颈。

比如,发起速率提高后,应用CPU维持在45%,磁盘await仍约1毫秒,但数据库连接获取时间从2毫秒升至80毫秒,连接池等待队列持续增长,P99从90毫秒升至300毫秒。这更支持连接池或数据库并发处理能力成为限制,而不是CPU不足。

也不能立即得出“扩大连接池就能解决”的结论。如果数据库已经承受不了更多并发,扩大池子可能只是把排队搬到数据库内部,并进一步抬高尾延迟。

用吞吐、时延和队列做交叉核验

稳定状态下,平均在途请求数可近似理解为:

平均在途请求数 ≈ 请求完成速率 × 平均响应时间。

例如,每秒完成1000次请求、平均响应时间为50毫秒,即0.05秒,平均在途请求数约为50。若完成速率仍为1000次/秒,平均响应时间升至200毫秒,即0.2秒,在途请求数约为200。

这一关系要求统计边界一致、系统接近稳定,且不能把P99代替平均响应时间。平均在途请求数还包含正在处理的请求,不等于纯等待队列长度。在队列持续增长的过载阶段,也不能直接套用稳态关系评估容量。

它的作用是检查观测是否自洽:响应时间明显增加,却既没有在途请求增加,也没有任何等待阶段变化,需要回头核对统计口径、时间戳或漏采情况。

网络带宽低于上限,仍可能拖慢尾延迟

网络问题不只表现为带宽跑满。重传、突发丢包、链路时延变化、连接建立成本,都可能让少量请求显著变慢。

以十进制单位估算,每秒1000个响应、每个响应平均64 KB,响应数据约为64 MB/s;乘以8后约为512 Mbps。这个数尚未计入请求流量及协议开销。若按64 KiB计算,则应以65536字节换算,不能混用KB与KiB。

排除网络因素时,应将客户端时延与服务端处理时延对照。如果服务端处理耗时基本不变,而客户端P99升高,同时重传或丢包增加,问题更可能位于传输路径。若服务端连接池等待和请求队列先升高,则应优先检查服务端及依赖。

压测机本身也需要监控。发压端CPU、连接数或网络先达到限制时,所谓“服务器吞吐平台”可能只是请求没有按计划发出。

排除替代解释:怎样把变化归到版本,而不是测试条件?

Ubuntu发行版升级通常伴随用户态库、服务组件和默认配置变化;内核更换则可能影响调度、内存管理、文件系统与网络处理路径。两者同时改变时,即便结果变好,也不能把收益全部归给Kernel 7.3。

如果实际可获得、兼容且受支持的组合允许,可以先比较原环境与目标环境,判断整体迁移收益;再在同一发行版上比较可用内核,缩小归因范围。不要为了凑出对照矩阵,强行运行未经兼容性验证的组合。

下列变化尤其容易制造“新版本更快”的假象:

左列为表面现象,包括CPU下降、磁盘读取减少、P99下降、吞吐提高、高负载更稳定、新组合波动较小;中列为对应的替代解释,包括请求减少或等待增加、缓存更热或工作集

表面现象需要排除的替代解释联动核对指标
CPU下降请求减少、等待增加、限流变强发起量、有效吞吐、队列、等待时间
磁盘读取减少缓存更热、工作集更小缓存命中率、数据集、内存占用
P99下降慢请求被超时或拒绝超时率、拒绝率、全部请求结果
吞吐提高响应变小、业务逻辑改变响应字节数、请求比例、应用版本
高负载更稳定发压端已饱和实际发起速率、压测机资源
新组合波动较小宿主机争用或后台任务不同steal、后台任务时间、存储延迟

发压模型也必须保持一致。固定并发模型中,请求通常在前一批完成后继续发出,系统变慢会自然降低实际到达率;固定到达率模型更适合观察目标流量下的排队,但也必须检查压测机有没有达到计划速率。

如果发压工具不能正确反映服务停顿期间本应到达的请求,报告可能低估尾延迟。至少应同时核对计划速率、实际发送速率、完成速率及延迟统计方式,不能只读压测报告中的一个吞吐数字。

形成可执行的版本判断

比较新旧组合时,不建议用“CPU低于80%”或“P99下降超过10%”作为所有业务通用的结论。更稳妥的是先定义服务目标,再比较达到目标的容量与资源成本。

例如,某API的示例目标为P99不超过200毫秒、总错误率不超过0.1%,并要求稳定段及持续运行过程中队列不增长。旧组合在每秒1100次请求以内满足要求,新组合在相同条件下可持续到每秒1250次,则可判断新组合在该业务、该机器规格和该测试范围内具有更高的可承载请求速率。

如果新组合只提高峰值吞吐,却让P99或错误率超出目标,就不能称为有效提升。若固定负载下表现更好,但长时间运行出现内存增长和周期性停顿,也应限定结论,不能据此认定适合生产迁移。

复测时,围绕疑似瓶颈同时观察一组指标

首次压测的作用是提出候选解释,复测才用来检验解释。优先选择疑似瓶颈出现前后两个相邻负载档,并在相同条件下重复运行;改变一个关键变量,观察此前关联是否仍然成立。

可使用常见只读工具采集基础指标。vmstat通常由procps提供,mpstat、pidstat和iostat通常需要sysstat。下面的命令应在不同终端中尽量同时启动,并与压测时间对齐:

vmstat 1 60
mpstat -P ALL 1 60
pidstat -u -r -d -w 1 60
iostat -xz 1 60

部分工具首屏是自启动以来的累计平均,分析稳定窗口时应排除。容器场景还要记录CPU配额、内存限制和限流事件,不能用宿主机总体空闲推断容器没有资源限制。

PSI接口可按实际可用情况读取:

for resource in cpu memory io; do
  path="/proc/pressure/$resource"
  if [ -r "$path" ]; then
    printf '\n%s pressure\n' "$resource"
    cat "$path"
  fi
done

这些工具不能替代应用侧指标。连接池等待、业务队列、数据库调用耗时和错误类型,仍需通过应用监控或日志关联。

下一次复测可以直接采用以下指标组合:

复测时,围绕疑似瓶颈同时观察一组指标配图

  • 怀疑CPU瓶颈:有效吞吐、各核CPU、运行队列、热点线程CPU时间、CPU PSI、P99。
  • 怀疑存储瓶颈:有效吞吐、读写IOPS、读写await、设备队列、io PSI、数据库调用耗时、P99。
  • 怀疑内存引发I/O:可用内存、RSS、缺页、swap活动、memory PSI、缓存命中率、读取量、P99。
  • 怀疑网络或依赖等待:客户端与服务端时延、网络速率、重传、连接池等待、外部调用耗时、超时率。

固定负载复测能回答“同样业务量是否更省资源、更少等待”,逐级加压复测能回答“达到服务目标的容量是否扩大”,持续运行则用于验证短时收益能否保持。每组至少重复多轮,并交错测试顺序;如果版本间差异小于同一组合自身的波动,应先增加样本,而不是急于宣布提升。

Ubuntu 26.10搭配Kernel 7.3是否值得用于某项业务,最终不由版本号或单个资源百分比决定。更有说服力的证据,是相同负载下有效吞吐、尾延迟、错误率和队列持续改善,且CPU、内存、I/O与网络的联动能够解释这种改善。下一轮压测,先把这条链上的指标同时采齐,再决定需要更多算力、更快存储,还是更合适的软件组合。