CPU占用达1265%,根本不用慌!90%的人都误解了top命令

运维李哥 2026-02-03 09:48:03
前两天社群有个用户用top命令查看进程时,有一个进程100%,以为CPU占满了,其实不然,下面我们就详细聊一下这个top命令。

 

很多人用 top 用了几年,却一直在错误解读它。

 

下面,我们就用一张真实的 top 截图,系统性讲清楚 top 的正确使用方式,以及最容易踩的认知坑。

 

先看截图:

 

 

 
 

为何MySQL CPU能跑到1265% ?

 
 

 

截图中最“刺眼”的一行:

 

  •  
  •  
PID   USER   VIRT   RES   %CPU   %MEM   COMMAND6308  mysql 220.7212.71265   84.5   mysqld

 

很多人第一反应:

 

 
 

“CPU 都 1265% 了?服务器要炸了”

 
 

 

但这恰恰是对 top 的第一个误解。上面截图中,MySQL服务多少有点问题,但业务并没有受影响。

 

误区 1:%CPU 最大只能是 100%

 

错误理解:

 

 
 

%CPU 是“CPU 使用率”,最大 100%。

 
 

 

正确理解:

 

 
 

top 中的 %CPU = 使用的 CPU 核心数 × 100%

 
 

 

我的机器是 16 核

 

  • 100% = 1 个核满载

     

  • 1265% ≈ 12.6 个核被 mysqld 占用,并没有达到上限

 

结论:这台机器的 MySQL 不是异常显示,而是在多核上疯狂并行执行。

 

误区 2:load average很高 = CPU 已经打满

 

截图顶部:

 

  •  
load average: 12.1711.7110.50

 

很多人一看到 load > 10,立刻下结论:

 

 
 

“CPU负载太高 快扛不住了!”

 
 

 

但你要先清楚一个问题:

 

这台机器有多少核?

 

正确判断方式:

 

CPU 核数
load ≈ 核数
含义
4 核
load ≈ 4
接近满载
16 核
load ≈ 12
完全可接受
32 核
load ≈ 12
偏空闲

 

load average ≠ CPU 使用率它表示的是:正在运行 + 等待 CPU 的进程数。

 

误区 3:id 很低才说明 CPU 有问题

 

截图中的 CPU 行:

 

  •  
%Cpu(s): 39.9 us, 0.4 sy, 58.6 id

 

58.6% idle

 

这说明什么?

 

CPU一半以上是空闲的。

 

这时候再结合:

 

  • mysqld:1265%

     

  • idle:58%

 

唯一合理的解释是:

 

多核机器 + 单个进程高并发消耗。

 

误区 4:VIRT 很大 = 内存要炸

 

  •  
  •  
VIRT 220.7gRES  212.7g

 

很多人看到 VIRT 直接慌了:

 

 
 

“虚拟内存 220G?是不是内存泄漏?”

 
 

 

正确理解:

 

字段
含义
VIRT
进程可用的虚拟地址空间
RES
真正占用的物理内存
SHR
可共享内存

 

MySQL 的 VIRT 很大是正常现象:

 

  • InnoDB buffer pool

     

  • 内存映射文件

     

  • malloc 预留

 

判断内存是否有问题,看RES + 系统是否 OOM,而不是看 VIRT。

 

误区 5:free 很小 = 内存不够

 

截图中:

 

  •  
  •  
  •  
  •  
  •  
KiB Mem:263973326 total8088860 free28235512 buff/cache30766036 avail Mem

 

很多人盯着:

 

 
 

free 只有 8GB,内存要满了!

 
 

 

但 Linux 的内存哲学是:不用白不用,有些在缓存中。

 

真正要看的字段是:avail Mem。

 

  • avail ≈ 30GB

     

  • 说明:系统仍然有足够内存可用。

 

误区 6:top 能直接定位“根因”

 

这张图最多能得出结论:

 

 
 

MySQL 正在大量消耗 CPU。

 
 

 

但你完全不知道为什么,这个就要进入MySQL数据库查看了,很大可能是慢SQL的问题。

 

正确使用 top

 

1)先确认 CPU 核数

 

  •  
lscpu

 

2)load 要和核数对比

 

  •  
load < CPU核数 ≠ 性能问题

 

%CPU > 100% 是常态。

 

多核时代,不懂这个等于白用 top。

 

内存优先看 avail,不是 free,不是 buff/cache。

 

作者丨运维李哥
来源丨公众号:运维李哥不背锅(ID:V_lige_linux)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告