Linux查看CPU、内存负载,top命令详解
前言
服务器变慢了?网站卡了?第一反应就是看看 CPU 和内存是不是跑满了。Linux 下最常用的查看系统负载的命令就是 top,相当于 Windows 的任务管理器。但很多人打开 top 后看得一头雾水,不知道各个数字代表什么意思。本文就把 top 命令的输出详解一遍,让你一眼就能看出服务器哪里出了问题。
启动 top 命令
直接在终端输入:
top
就能看到实时的系统监控界面。按 q 键退出。
top 输出详解
top 的输出分为两部分:上面是系统整体信息,下面是各个进程的详细列表。
第一行:系统概况
top - 10:30:45 up 30 days, 2:15, 1 user, load average: 0.50, 0.40, 0.30
10:30:45:当前系统时间up 30 days, 2:15:系统已经运行了30天2小时15分钟1 user:当前有1个用户登录load average: 0.50, 0.40, 0.30:系统负载,分别是1分钟、5分钟、15分钟的平均负载
负载怎么看? 负载数值和 CPU 核心数有关。比如4核CPU,负载4.0才算跑满;如果负载超过 CPU 核心数的70%就需要注意了。
第二行:任务进程
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
120 total:总共有120个进程1 running:1个正在运行119 sleeping:119个休眠中0 stopped:0个停止0 zombie:0个僵尸进程
僵尸进程多了要注意,说明有进程没正常退出。
第三行:CPU 使用情况
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 92.0 id, 0.5 wa, 0.0 hi, 0.5 si, 0.0 st
us:用户态CPU占用百分比sy:内核态CPU占用百分比ni:改变过优先级的进程占用id:空闲CPU百分比wa:等待I/O的CPU百分比hi:硬中断占用si:软中断占用st:被虚拟机偷走的CPU时间
重点看 us 和 id: 如果 us 很高说明用户进程占了大量CPU;如果 wa 很高说明磁盘I/O是瓶颈。
第四行:内存使用
KiB Mem : 8165036 total, 2000000 free, 4000000 used, 2165036 buff/cache
total:总内存free:空闲内存used:已用内存buff/cache:缓存占用
注意: Linux 的内存管理机制和 Windows 不一样,free 很少不代表内存不够用,因为很多内存被用作缓存(buff/cache),需要的时候可以释放出来。
第五行:交换分区
KiB Swap: 2097148 total, 2097148 free, 0 used. 4000000 avail Mem
total:交换分区总大小free:空闲交换分区used:已用交换分区avail Mem:可用内存(包括可回收的缓存)
如果 Swap 用了很多,说明物理内存不够用了,系统在把内存数据换到磁盘上,这时候性能会大幅下降。
进程列表
下面是各个进程的详细列表,各列含义:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 100000 20000 5000 S 5.0 0.2 1:23.45 nginx
PID:进程IDUSER:进程所属用户PR:进程优先级NI:nice值,负值优先级高VIRT:虚拟内存占用RES:物理内存占用(常驻内存)SHR:共享内存S:进程状态(R运行/S睡眠/D不可中断睡眠/Z僵尸)%CPU:CPU占用百分比%MEM:内存占用百分比TIME+:累计CPU时间COMMAND:进程名
top 常用快捷键
在 top 界面里,可以按这些键进行交互:
| 按键 | 功能 |
|---|---|
P |
按CPU占用排序(默认) |
M |
按内存占用排序 |
N |
按PID排序 |
1 |
显示每个CPU核心的详细信息 |
k |
杀掉指定PID的进程 |
q |
退出top |
h |
显示帮助 |
d |
刷新间隔时间(秒) |
u |
只显示指定用户的进程 |
c |
显示完整命令行 |
实际排查案例
案例1:CPU 占用很高
打开 top,按 P 键按CPU排序,看哪个进程占的CPU最多。如果是某个异常进程,按 k 输入PID杀掉。
案例2:内存占用很高
按 M 键按内存排序,看哪个进程占的内存最多。如果是数据库占的内存多,那是正常的(数据库会把数据缓存到内存里)。
案例3:系统负载高但CPU不高
如果 load average 很高,但 %us 和 %sy 都不高,看看 %wa 是不是很高。如果 wa 高,说明是磁盘I/O瓶颈,CPU在等磁盘读写。
常见坑
坑1:把 buff/cache 当成已用内存
很多人看到 free 很少就慌了,觉得内存不够用。其实 Linux 把空闲内存都用来做缓存了,buff/cache 那部分是可以随时回收的。看 avail Mem 那列才是真正可用的内存。
坑2:load average 高就以为CPU不够
负载高不一定是CPU的问题。可能是磁盘I/O瓶颈(%wa高),也可能是大量进程在等待资源。要结合CPU使用率一起看。
坑3:杀进程杀错了
用 k 杀进程的时候一定要确认PID是不是对的,别把系统关键进程杀了。杀错了可能直接导致系统挂掉。
总结
top 命令是 Linux 运维最常用的监控工具,记住几个关键点:
- 看负载:
load average,和CPU核心数对比 - 看CPU:
%us高说明用户进程吃CPU,%wa高说明磁盘I/O瓶颈 - 看内存:看
avail Mem,不要只看free - 排序:按
P看CPU占用,按M看内存占用 - 杀进程:按
k输入PID
日常排查服务器问题,先打开 top 看一眼,大部分问题都能定位到方向。
遇到问题加QQ23979811 协助处理