news 2026/9/6 19:35:06

Linux性能排查必备:lscpu、w、top、free、df五大命令详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux性能排查必备:lscpu、w、top、free、df五大命令详解

如果你经常登录服务器排查问题,肯定被这几个问题折腾过:CPU 到底几核?负载算不算高?内存是不是不够用了?磁盘怎么又满了?这次把 Linux 上最常用的五个命令lscpuwtopfreedf一次性讲透。它们都是系统自带工具,不需要额外安装,不占监控 Agent 资源,单个命令看一个维度,组合起来正好覆盖日常性能排查的第一轮判断。

文章会做四件事:先给一张核心能力速览表,再逐个拆解命令的关键字段和常用参数,接着给一套从负载到进程到内存再到磁盘的排查顺序,最后补充自动化采集脚本和常见坑。适合刚接触服务器维护的运维新手,也适合需要写排查脚本的开发同学。

1. 核心能力速览

命令作用主要输出最常用场景
lscpu查看 CPU 架构、核数、频率、缓存、虚拟化支持CPU 数量、型号、架构、NUMA 节点确认服务器规格,判断逻辑核和物理核
w查看系统负载、在线用户、每个用户占用的终端和任务load average、用户终端、JCPU、PCPU快速判断系统是否高负载,谁在干活
top动态查看进程级 CPU、内存占用系统总览、CPU 统计、内存统计、进程列表定位占用最高的进程,观察 CPU 和内存分配
free查看物理内存和 Swap 使用情况total、used、free、shared、buff/cache、available判断内存是否充足,排查 OOM 风险
df查看文件系统磁盘空间和 inode 使用情况文件系统、容量、已用、挂载点检查磁盘是否满,定位 "No space left" 问题

这五个命令的共同点是:全部来自系统基础工具包,读取的是/proc等内核接口,执行成本低,普通用户即可运行。组合使用的时候,先看w确认负载,再用top找进程,用free看内存压力,用df排除磁盘空间问题,最后用lscpu确认 CPU 规格作为判断阈值的基础。

2. 适用场景与使用边界

这套命令最适合做第一轮性能排查。比如线上告警说接口变慢、服务器负载高、某个进程被杀,你登录机器后必须在几分钟内给出初步判断。这时候打开终端依次执行wtopfreedf,基本能把问题范围缩到 CPU、内存、磁盘这几个大类里。

它也适合做硬件信息核对。采购的机器到了,或者云主机配置有疑问,用lscpu看核数和架构,用free -h看内存总量,用df -h确认数据盘是否挂载,比登录云控制台还要快。

但也有明显边界:这几个命令都是瞬时快照,不能替代专业监控系统。要看趋势曲线,得配合探针采集;要看历史负载,得依靠 Prometheus 或 Zabbix 这类平台。另外top虽然可以动态刷新,但它本身是一个交互程序,在自动化脚本里需要用批处理模式,否则会卡住。free显示的内存使用量也不能直接当“内存告急”的标志,必须先理解availablebuff/cache的含义。

操作边界也要注意:top里的k可以直接杀进程,free的缓存回收操作会影响性能,df显示某个挂载点满了时不要盲目删文件,尤其是生产环境。所有会改变系统状态的命令,都要先确认业务影响。

3. 环境准备与前置条件

这几个命令在绝大多数 Linux 发行版中都预装了,不需要复杂环境。你只需要:

  • 一台 Linux 服务器或本地虚拟机,主流的 CentOS 7/8、Ubuntu 20.04/22.04、Debian 均适用。
  • SSH 登录权限,普通用户即可查看大部分信息;如果要用top调整进程优先级或 kill 进程,需要 root 或对应权限。
  • 如果是最小化安装的系统,某些命令可能缺失,需要安装procpsutil-linux工具包。

检查命令是否存在:

command -v lscpu command -v top command -v free command -v df command -v w

如果某个命令提示 not found,按发行版安装。CentOS/RHEL 系列:

sudo yum install -y procps-ng util-linux

Ubuntu/Debian 系列:

sudo apt update sudo apt install -y procps util-linux

这些工具本身依赖很少,安装后即可使用。接下来逐个看命令的详细输出和参数。

4. 命令使用详解

4.1lscpu查看 CPU 架构与核心信息

lscpu会汇总/proc/cpuinfo和 sysfs 中的 CPU 信息,输出格式对终端阅读有优化。执行后典型的输出如下:

Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 46 bits physical, 48 bits virtual CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 158 Model name: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz Stepping: 9 CPU MHz: 3600.000 CPU max MHz: 4200.000 CPU min MHz: 800.000 BogoMIPS: 7200.00 Virtualization: VT-x L1d cache: 128 KiB L1i cache: 128 KiB L2 cache: 1 MiB L3 cache: 8 MiB NUMA node0 CPU(s): 0-7

在实际排查中,你需要关注这几个字段:

  • CPU(s):逻辑 CPU 总数。上面例子是 8,物理机是超线程后的总数。
  • Thread(s) per core:每核线程数,2 表示开启了超线程。
  • Core(s) per socket:每个物理 CPU 的物理核数。
  • Socket(s):CPU 卡槽数量。
  • Model name:CPU 型号,性能判断的第一依据。
  • Virtualization:是否支持虚拟化,搭建虚拟机时看这个。

计算逻辑核数的方法是Thread(s) per core × Core(s) per socket × Socket(s)。如果结果是 8,而CPU(s)也是 8,说明没有逻辑核浪费。如果想只看部分字段,可以用-e输出可扩展视图,一列一列对应:

lscpu -e

在脚本中想拿到稳定的机器可读输出,建议用-J输出 JSON:

lscpu -J

很多人会碰到一种情况:执行lscpu后找不到Model name,输出里只有ModelStepping,没有具体型号。这通常发生在某些虚拟化环境或云主机上,宿主机没有把物理 CPU 型号暴露给虚拟机。解决办法是看/proc/cpuinfo

cat /proc/cpuinfo | grep -m 1 "model name"

如果/proc/cpuinfo也没有,就是虚拟化层故意屏蔽了,不必纠结,用CPU(s)和缓存大小也能判断规格。

4.2w查看系统负载与用户活动

w的功能比uptime更多,第一行会显示当前时间、系统运行时长、在线用户数,以及最重要的load average三项值:

10:22:31 up 18 days, 3:11, 2 users, load average: 0.08, 0.03, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.1.10 10:20 1.00s 0.04s 0.02s w deploy pts/1 192.168.1.11 09:30 52:00 0.11s 0.05s tail -f app.log

load average后面的三个数字分别代表过去 1 分钟、5 分钟、15 分钟的系统负载平均值。这个值不是 CPU 使用率,而是处于可运行状态和不可中断状态(通常是等待磁盘/网络 IO)的平均进程数。判断负载是否异常,要结合lscpu看到的逻辑核数:

  • 负载长期低于核数:系统整体比较空闲。
  • 负载接近或等于核数:CPU 资源已被充分使用。
  • 负载远高于核数(比如 16 核主机负载到 30):说明排队严重,需要进一步定位。

用户行里的PCPU表示进程累计消耗的 CPU 时间,JCPU表示终端相关所有进程消耗的时间。WHAT显示用户当前正在执行的命令,用来判断是否有测试脚本或慢任务挂在终端上。

只看负载可以用uptime

uptime

w的优势在于同时输出用户和任务,排查现场时更省事。脚本采集时通常只需要第一行,可以提取:

w | head -1

4.3top动态查看进程负载

top是排查 CPU 和内存问题最常用的工具。启动后是一个实时刷新页面,默认按 CPU 使用率从高到低排序。最上面 5 行是系统总览,下面是进程列表。

第一行和w类似,包含负载均值。第二行是任务统计:

Tasks: 203 total, 1 running, 202 sleeping, 0 stopped, 0 zombie

第三行是 CPU 统计:

%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 91.7 id, 0.5 wa, 0.3 hi, 0.2 si, 0.0 st

各列含义:

  • us:用户态 CPU 占用。
  • sy:内核态 CPU 占用。
  • id:空闲率。
  • wa:等待 IO 完成的比例,这个值高说明磁盘或网络 IO 可能是瓶颈。
  • st:被虚拟化层偷走的时间,云主机常见,太高说明宿主机资源争抢严重。

第四行和第五行是内存和 Swap 信息,基本对应free命令的输出。

进程列表里默认展示 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND。排查时重点看:

  • %CPU:单核占用比例,超过 100% 说明使用了多核。
  • %MEM:物理内存占用比例。
  • RES:常驻物理内存,进程真实占用的内存。
  • TIME+:累计 CPU 时间,可以判断进程是否长时间吃 CPU。

交互键非常有用。按1可以显示每个逻辑核的使用率;按大写P按 CPU 排序;按大写M按内存排序;按c显示进程完整命令行;按k输入 PID 可以杀进程;按r可以调整优先级。这些都是排查现场的高频操作:

# 启动 top top # 按数字键 1:查看每个 CPU 核心 # 按大写 P:按 CPU 使用率排序 # 按大写 M:按内存使用率排序 # 按 c:显示完整命令行 # 按 q:退出

在自动化脚本里不能进入交互界面,要用批处理模式:

# 只采集一次快照 top -b -n 1 # 只看指定进程 top -b -n 1 -p 12345 # 按内存占用排序输出 top -b -n 1 -o %MEM

-b表示批处理,-n 1表示只输出一次,避免脚本一直刷新。-o指定排序列,支持%CPU%MEM等。这些参数比在交互界面里慢慢按要适合采集场景。

4.4free查看内存使用

内存问题用free看,最常用的参数是-h,以人类可读的单位显示:

total used free shared buff/cache available Mem: 31Gi 9.8Gi 1.1Gi 150Mi 20Gi 20Gi Swap: 8.0Gi 0B 8.0Gi

很多人第一次看到会误判:used 很大,free 很小,是不是内存紧张?其实不是。Linux 会尽量把内存用作缓存(buff/cache),空闲时用于缓存文件数据,当应用需要时再让出来。所以最该看的是available,它表示不需要交换就能分配给新进程的内存估算值。

字段说明:

  • total:物理内存总量。
  • used:已使用的物理内存,包含页缓存和内核数据结构的一部分。
  • free:完全空闲的内存,很小不表示内存不足。
  • shared:多个进程共享的内存。
  • buff/cache:用作块设备缓存和文件缓存的内存,业务压力大时可以被回收。
  • available:当前真正可用的内存,是评估内存压力的关键指标。

常用参数:

# 人类可读输出 free -h # 以 MB 为单位 free -m # 每 3 秒刷新一次,观察内存变化 free -s 3 # 同时显示总览行 free -t

如果available长期偏低,或者 Swap 的used快速增长,就说明内存可能吃紧。进一步定位是哪个进程占用的,用:

top -b -n 1 -o %MEM | head -20

head截断输出,只保留内存占用最高的前 15 行左右。注意观察 Swap 前几行里的进程,这些进程也值得关注。生产环境不要轻易执行echo 3 > /proc/sys/vm/drop_caches去手动释放缓存,通常没必要,而且可能引起性能抖动。

4.5df查看磁盘空间

磁盘空间问题用df,日常用法是加-h-Th

df -h
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 22G 17G 58% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/vdb1 200G 190G 1.5G 100% /data

-T会显示文件系统类型:

df -Th

排查“磁盘满”时,只确认空间够不够还不行,还要看 inode。文件很多时空间没用完,但 inode 会先满了:

df -i
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 2600000 21440 100% /

如果df -i显示 100%,但df -h还有剩余空间,说明是“小文件过多”导致 inode 耗尽。这时候继续用df -h判断空间没有意义,要去找哪个目录堆积了大量小文件,然后清理。

还有一种常见情况:df -h显示还有空间,但写入文件时报No space left on device。可能是 inode 满了,也可能是某个被删除的文件还被进程占用。后者用下面命令查:

lsof | grep deleted

判断哪些文件被删但进程仍然持有句柄,确认后重启对应进程或 kill 进程才能释放空间。

df也支持按指定路径查看:

df -h /data

这条命令只看某个目录所在的文件系统,适合挂在云盘、数据盘较多的服务器。

5. 组合使用与性能排查示例

单个命令信息有限,组合起来才是完整排查链路。下面以“用户反馈服务变慢”为例,给出一套适合现场执行的排查流程。

第一步,看系统负载和在线用户:

w

如果load average的 1 分钟值明显高于 15 分钟值,说明负载是最近才涨起来的,多半是突发的进程或请求。然后看用户列表里有没有人正在跑压测或 tail 日志。

第二步,看 CPU 使用率和进程排名:

top -b -n 1 | head -20

重点关注%Cpu(s)里的ussywastwa高则先去查磁盘 IO,st高则考虑云主机资源争抢,us高则继续往下看进程列表,定位%CPU最高的进程。

第三步,看内存是否吃紧:

free -h

如果available已经很低,Swap也在持续增长,说明内存不足。再回到top按内存排序:

top -b -n 1 -o %MEM | head -20

第四步,看磁盘是否满:

df -h df -i

这两条命令一起执行,先排除空间耗尽,再排除 inode 耗尽。

最后汇总判断:

  • 如果load average高、%CPU高、某个业务进程%CPU也很高,说明 CPU 型负载。
  • 如果load average高、%CPU不高、wa很高,说明 IO 型负载,需要进一步看磁盘iostat或网络。
  • 如果available内存很低,同时有进程%MEM很高,优先考虑内存型问题。
  • 如果df显示 100%,则清理磁盘或扩容是最直接的动作。

这套流程不用安装额外工具,能覆盖大多数性能问题的第一轮判断。后续如需深挖,再上pidstatiostatstrace或监控平台。

6. 自动化采集与批量监控

这五个命令本身不提供业务 API,但完全可以用 Shell 脚本做定时采集,把结果输出成可供监控系统或 Log 平台读取的格式。下面是一个简单的采集脚本,按固定分隔符输出:

#!/bin/bash # 采集 CPU 核数、负载、内存、磁盘信息,输出为 key=value 格式 LOG_TIME=$(date '+%Y-%m-%d %H:%M:%S') CPU_CORES=$(nproc) LOAD_1=$(uptime | awk -F'load average:' '{print $2}' | awk -F',' '{print $1}') MEM_TOTAL=$(free -m | awk '/^Mem:/{print $2}') MEM_AVAIL=$(free -m | awk '/^Mem:/{print $7}') DISK_USED=$(df -h / | awk 'NR==2{print $5}') echo "time=$LOG_TIME" echo "cpu_cores=$CPU_CORES" echo "load_1min=$LOAD_1" echo "mem_total_mb=$MEM_TOTAL" echo "mem_avail_mb=$MEM_AVAIL" echo "disk_used_percent=$DISK_USED"

如果你需要进程层数据,可以用top批处理模式:

top -b -n 1 | sed -n '1,6p'

再把结果追加到采集日志:

top -b -n 1 >> /var/log/top_snapshot.log

要注意的是,top -b -n 1输出内容较多,如果定时任务很频繁,日志会增长很快。建议只保留必要行,或者先用head截取。Cron 定时执行示例:

*/1 * * * * /opt/scripts/collect_perf.sh >> /var/log/perf_collect.log 2>&1

这类脚本适合放在小型服务器或临时排查场景,不能替代专业监控。生产环境建议优先使用 Node Exporter、Telegraf 等采集器,它们对/proc的读取更规范,也自带指标存储和告警。

7. 资源占用与性能观察

这几个命令自身非常轻量,对系统性能影响可以忽略。但要注意几个细节:

top交互模式是动态刷新,默认每 3 秒刷新一次,常驻交互界面会占用一定 CPU,不过很低。批量模式top -b -n 1只执行一次,适合脚本。lscpu会读取 sysfs 和/proc/cpuinfo,在核数很多的服务器上输出多行,但执行时间通常在毫秒级。freedf也是直接读系统接口,成本很低。

排查性能时,我们更关心的是命令输出反映出来的资源变化。可以利用watch自动刷新,比如每 2 秒看一次内存:

watch -n 2 free -h

看负载变化:

watch -n 2 uptime

在压力测试场景下,建议同时开两个终端,一个跑top,一个依次执行free -s 5df -i。观察维度的变化趋势比看单次值更有价值。比如available从 10G 掉到 500M,但buff/cache在同步增长,说明文件缓存被大量使用;如果Swap used也在涨,就有内存压力。

另外要注意:命令输出的值永远是瞬时快照。top第一行是自启动到当前的聚合数据,不是实时值,所以长时间观察时要记录多个采样点,判断趋势。不要在 CPU 占用率刚升高 2 秒后就下结论,多采几次再定位。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
lscpu不显示 CPU 型号虚拟化层未透传型号,或内核参数隐藏cat /proc/cpuinfo | grep model name型号信息确实拿不到时,以核数和主频为准
topwa很高,但进程%CPU不高磁盘 IO 或网络 IO 阻塞,进程在等待 IOiostat -x 1iotop确认是哪个磁盘,评估是否扩容或优化读写逻辑
free -h显示 used 很高,free 很小Linux 缓存策略,buff/cache 占了内存看 available,不要只看 free正常现象,只要 available 充足就不必回收缓存
df -h有空间,但写入报 No space leftinode 耗尽,或已删除文件被进程占用df -ilsof | grep deleted清理小文件,或重启占用删除文件句柄的进程
负载很高,但 CPU 使用率很低大量 D 状态进程,通常是内核 IO 等待topwa,或抓取 D 状态进程定位具体 IO 路径,检查磁盘健康或网络存储
top命令找不到最小化安装缺少 procps 包command -v topyum provides top安装 procps-ng 或 procps 包
free输出单位看不懂默认以字节显示使用free -h用人类可读单位查看
lscpu在脚本中解析费力人类可读输出不适合程序处理lscpu -J或解析/proc/cpuinfo脚本里使用 JSON 输出或直接读/proc
w没有显示用户任务用户可能登录很久,或 WHAT 被截断检查w输出宽度扩大终端宽度,或用w -u过滤用户

9. 最佳实践与使用建议

先花十分钟把正常状态下的基线记录保存下来。比如新机器刚上线时,把lscpu的核数、free -h的总内存、df -h的磁盘使用率都记录下来,后面出现告警时可以直接对比,判断是业务增长还是异常故障。

日常操作建议按“先整体后局部”的顺序执行。先用w看负载,再用top看进程,用free看内存,用dfdf -i看磁盘。每一步都只关注关键字段,不要把输出从头到尾背下来。判断内存一定要看available,而不是free。判断磁盘一定要df -hdf -i一起看,两者缺一不可。

脚本里解析命令输出时,优先使用稳定的命令参数。比如free -m可以按 MB 输出,df -h适合人看但不适合程序切割,可以考虑df / --output=source,size,used,avail,pcent -B G这类可预测输出格式。不同发行版对参数支持有差异,建议先在本机man df确认。

批量管理服务器时,把这五个命令封装成一个小脚本,通过 SSH 批量分发执行,可以快速摸清一批机器的资源情况。但要注意:不要通过定时任务高频执行top交互模式,也不要删除系统自带工具。排查完成后,保持系统环境干净,能降低后续出问题的概率。

另外,使用top时要养成先看进程归属和完整命令行的习惯,再决定是否 kill。某些进程名看起来可疑,但可能是宿主机的内核线程或系统组件,贸然操作会造成服务中断。生产环境所有动手类操作都要有确认环节,最好先记录现场快照,再执行变更。

10. 总结与下一步

lscpuwtopfreedf这五个命令覆盖了 CPU 规格、系统负载、进程资源、内存和磁盘空间五个核心维度。对运维和开发来说,它们是服务器排查的第一梯队工具,学起来成本低,使用频率高,组合起来能解决日常大部分初步定位问题。

建议先在自己机器上跑一遍,不要求记住所有参数,但要记住排查顺序:负载异常看w,进程定位用top,内存压力看free -h,磁盘报错查df -hdf -i。遇到不认识的字段,第一时间用man查手册,比网上零散搜索更可靠。

下一阶段可以继续学习iostat看磁盘 IO、pidstat看单进程上下文切换、vmstat看系统整体统计,再配合 Prometheus 做长期趋势监控。基础命令用熟了,后面接触更深入的工具会轻松很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 7:56:37

64位C#上位机实现台达PLC Modbus通信实战

简介:Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其RTU与TCP两种模式分别适配现场总线与以太网环境。理解Modbus功能码(如0x03读保持寄存器、0x06写单个寄存器)及CRC16校验原理,是构建稳定上位机系统的底…

作者头像 李华
网站建设 2026/9/1 6:58:40

AutoDis:深度学习CTR模型中连续特征自动离散化与Embedding技术详解

1. 项目概述:为什么我们需要为连续特征寻找更好的Embedding?在推荐系统、广告点击率(CTR)预估这些我们每天都要打交道的场景里,特征工程一直是个既基础又头疼的活儿。尤其是那些连续特征,比如用户的年龄、历…

作者头像 李华
网站建设 2026/9/2 8:26:09

西门子PLC与变频器HMI开发实战:组态、调试与排错全解析

前阵子刚交付了一个智能显示器上的HMI开发项目,从需求分析到现场调试前后折腾了三周。这套系统其实是给一条老产线做设备升级,原来用的是文本显示器和一堆按钮,操作员要跑去变频器面板上看电流和频率,调度室想看产量数据还得靠人工…

作者头像 李华
网站建设 2026/8/31 13:35:27

AI编程本地持久记忆:无需Embeddings的轻量方案

平时用 AI Coding 工具写代码,最让人烦躁的往往不是模型能力不够,而是“它又忘了”。改完一个文件,重新开一轮对话,还要把项目背景、技术栈、刚才改到哪一步重新讲一遍。如果正在用多 Agent 协作的 AI 编程工作流,问题…

作者头像 李华
网站建设 2026/8/31 11:53:19

TensorFlow与CNN猫狗识别实战:从数据到模型部署完整指南

毕业设计选“猫狗识别”这个题目的人很多,但它确实是最适合入门卷积神经网络的选题之一:公开数据集好找、任务就是二分类、模型可以做得不大、普通笔记本甚至 CPU 也能训练。这次我们就把一套基于 TensorFlow CNN 的猫狗二分类实现完整过一遍&#xff0…

作者头像 李华
网站建设 2026/8/31 17:18:49

C++ STL函数对象与算法精解:从仿函数到高效编程实践

1. 从“可调用”到“可定制”:理解STL中的函数对象在C的日常开发里,尤其是和STL(Standard Template Library)打交道时,我们经常听到“函数对象”或者“仿函数”这个词。很多初学者,包括当年的我&#xff0c…

作者头像 李华