服务器CPU占用率不高却卡顿,多数时候是磁盘I/O、内存交换或网络等待拖住了请求,CPU只是在空转等待。
服务器CPU占用率不高但是很卡?先把目光从CPU上移开
服务器卡顿的第一反应往往是“CPU不够用”,但当你打开监控面板,CPU占用率只有百分之十几,甚至个位数,页面却还在转圈,这不是CPU在偷懒,而是它在等别的部件交作业。
磁盘I/O:CPU其实在“假装空闲”
CPU处理数据的速度极快,但磁盘读写数据的速度慢得多,当服务器频繁读写小文件、生成大量日志或数据库写入压力大时,CPU发出一条读取指令,接下来就只能等待磁盘把数据送回,这个等待时间里,CPU并不会显示忙碌,因为操作系统统计的是CPU实际执行指令的时间,不包括等待I/O的时间。
相当一部分服务器卡顿与磁盘I/O有关,尤其是使用机械硬盘或低IOPS云盘的场景。 某台服务器上运行着图片较多的网站,用户访问时系统要读取大量小图片,磁盘寻道时间累积起来,页面响应自然变慢。
登录服务器后,可以执行下面命令实时观察:
iostat -x 1:重点看%util和await。%util持续接近满格,而await数值又很大,说明磁盘已经忙不过来。top中查看wa(I/O wait)数值,CPU空闲但wa较高,基本就是磁盘在拖后腿。
解决思路包括:把机械盘换成SSD、把数据库和静态文件分离、减少不必要的日志写入、给热点数据加缓存。
内存与swap:工作台太挤,CPU只能干等
内存不足时,系统会把一部分不常用的数据从内存搬到磁盘上的swap分区,等需要时再换回来,这个过程叫换页,速度比直接访问内存慢几个数量级。
如果服务器配置够用还是卡,先看内存是不是被吃满。 运行Java应用、数据库或缓存服务的服务器,内存占用长期处在高位,一旦开始使用swap,就会表现为“CPU不高但响应迟钝”,此时CPU没有在做实际计算,而是在等数据从swap回到内存。
执行以下命令可以快速判断:
free -h:查看内存和swap使用量。vmstat 1:看si(swap in)和(swap out)两列,如果这两个数值持续不为零,说明换页活动频繁,需要加内存或优化应用内存占用。
so
服务器CPU占用率低但网站打开慢,网络和数据包也会卡住响应
CPU空闲、磁盘正常,网站还是打开慢,这时候要看看数据包在路上经历了什么。
连接数和时间等待队列
服务器能同时处理的网络连接数是有限的,高并发场景下,即使每个请求消耗的CPU很小,连接数本身就可能成为瓶颈,特别是短连接频繁建立和关闭时,系统会积累大量 TIME_WAIT 状态的连接,占满TCP端口范围,新连接无法建立,表现就是“卡”。
可以执行下面命令排查:
ss -s:查看当前TCP连接状态分布,timewait数量是否异常偏高。ulimit -n:查看文件描述符上限,连接数、打开文件数都受这个限制,如果数值偏小,高并发下容易耗尽。netstat -an | grep :80 | wc -l:统计某端口的当前连接数,与系统上限对比。
调整方式包括:扩大文件描述符限制、优化内核参数让服务器更快回收 TIME_WAIT 连接、使用长连接或连接池。
带宽跑满:国内服务器的常见尴尬
国内服务器CPU负载低却卡顿,有时不是计算能力问题,而是带宽不够。 很多国内云服务器默认带宽只有3M或5M,如果网站有大量图片、下载文件或视频资源,这点带宽很容易被占满,用户下载数据需要排队,服务器CPU再强也帮不上忙。
查看带宽使用情况,可以在服务器上用 iftop、nload 或云厂商控制台监控,如果带宽曲线长时间顶格,就需要考虑增加带宽、使用CDN分流静态资源,或者压缩传输内容,升级CPU对这个场景基本无效。
服务器运行卡顿CPU占用率不高,单核与锁等待藏得最深
总CPU占用率低,不代表所有核心都空闲,有些指标会骗人。
单核性能瓶颈:一个核心忙死,其他核心闲死
很多应用是单线程模型,比如部分PHP脚本、Python服务、老旧的数据库查询,它们只能利用一个CPU核心,其他核心在旁边围观,总CPU占用率可能只有12%假设8核服务器,一个核心满载就是12.5%。服务器运行卡顿CPU占用率不高,很可能就是单核被打满。

排查时在 top 界面按数字 1,展开每个CPU核心的使用率,如果某个核心持续接近满载,而其他核心空闲,基本可以确认是单线程瓶颈,解决方向包括:优化代码减少单线程任务、使用多进程或多线程模型,或者换用单核性能更强的CPU。
数据库锁等待与线程阻塞
数据库操作中,当一个事务锁住了某行数据,其他事务要修改同一行时只能排队等待,这种等待不消耗CPU,但会让请求卡住,应用线程池耗尽也是类似情况:所有工作线程都在等外部资源,新请求进不来。
较大比例的应用卡顿与锁等待有关。 可以在数据库中执行 SHOW PROCESSLIST 查看连接状态,如果大量连接处于 Locked 或 Sending data 状态,说明查询缓慢或锁等待严重,应用层面可以查看线程dump,分析线程是否阻塞在某个方法调用上。
国内服务器CPU负载低却卡顿,虚拟化和参数配置在作怪
云宿主机资源争抢
国内云服务器大多运行在共享宿主机上,同一个物理机上会有多个租户的虚拟机,邻居的高负载可能影响你的磁盘和网络表现,出现偶发卡顿,行业共识认为,云服务器上的资源争抢现象比物理机更容易导致性能抖动,这类问题在监控面板上往往看不到CPU异常,但实际响应时间忽高忽低。
应对办法包括:迁移到独享型实例、更换可用区,或者在不同时段进行压测对比,观察是否与宿主机高峰相关。
业内专家指出,当CPU空闲但应用卡顿时,优先查看进程的等待链往往能快速定位瓶颈。
内核参数与文件句柄限制
Linux默认内核参数不一定适合高并发场景。net.core.somaxconn 设置太小,会导致TCP连接队列溢出;fs.file-max 偏低则限制打开文件数量,这些都不会直接推高CPU占用率,却会让服务器在高负载下“看起来卡”。
可以检查以下参数:
sysctl net.core.somaxconnsysctl fs.file-maxsysctl net.ipv4.tcp_max_syn_backlog
根据业务并发量适当调高这些数值,能减少连接建立失败的概率。
服务器配置够用还是卡,按这个顺序排查最有效

与其盲目升级CPU,不如按下面路径走一遍,多数卡顿都能定位清楚。
| 排查步骤 | 观察指标 | 可能指向的瓶颈 |
|---|---|---|
top / htop |
CPU使用率、负载、wa |
磁盘I/O或单核瓶颈 |
iostat -x 1 |
%util、await |
磁盘性能不足 |
free -h / vmstat 1 |
swap使用、si/so |
内存不足 |
ss -s / ulimit -n |
连接数、文件句柄 | 网络连接或句柄耗尽 |
iftop / 云监控 |
带宽使用 | 带宽瓶颈 |
| 数据库慢查询日志 | 慢SQL、锁等待 | 数据库性能 |
实际操作中,可以先用 top 看 wa 和单核情况,再依次排查磁盘、内存、网络,别一上来就加配置,方向错了花再多钱也不解决问题。
服务器CPU占用率不高但是很卡,常见问题快问快答
服务器CPU占用率不高但是很卡,先查磁盘还是网络?
先查磁盘I/O,因为磁盘等待会直接表现为CPU空闲但请求处理缓慢,执行 iostat -x 1 看 %util 和 await 最直接,如果磁盘指标正常,再查网络连接数和带宽,多数情况下,磁盘I/O问题比网络瓶颈更常见。
服务器CPU占用率低但网站打开慢,升级CPU有用吗?
多数场景下没用,CPU利用率低说明计算能力不是瓶颈,升级CPU只会让闲置更严重,应该先根据 wa、swap、带宽和连接数定位真正的短板,如果确认是单核满负荷导致的总占用率低,这时升级单核性能更强的CPU才有意义。
国内服务器CPU负载低却卡顿,要不要换地域或线路?
如果监控显示带宽未满、磁盘正常,但仍出现周期性卡顿,可以测试不同地域或可用区的表现,云服务商的宿主机分布和网络线路会因地域不同而变化,部分地域高峰期容易出现资源争抢,更换地域或选择独享型实例,有时比单纯加配置更有效,根据实际测试结果决定是否迁移即可。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/804881.html


评论列表(2条)
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@小花4568:读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!