主题
概念卡片:Linux运维命令与排障
一句话机制:运维命令是「查状态 → 定位瓶颈 → 对症处理」三板斧的工具箱——
top/uptime看 CPU 与负载、ps看进程、df/du看磁盘、netstat/ping看网络;排障的核心不是背命令,而是先定性(利用率 vs 负载、用户态 vs 系统态),再定位(哪类进程/哪层资源),最后处理。
CPU 利用率 vs CPU 负载(最常考)
| 概念 | 含义 | 临界判断 |
|---|---|---|
| CPU 利用率 | 程序对 CPU 时间片的占用比例(实时) | 满 = 100% |
| CPU 负载 | 一段时间内正在使用 + 等待使用 CPU 的平均任务数 | 单核 >1 即排队 |
- 查看命令:
uptime/w(负载)、top(利用率 + 各进程占比)。 - 判断标准:单核负载 1 = 满负荷;2 核 4 逻辑 CPU 总负载 <4 正常。
- 负载与利用率无必然关系:利用率 100% 可能负载只有 1(一个计算密集任务);利用率低也可能负载高(一堆 IO 等待)。
查 CPU 核数:
bash
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 物理 CPU 数
cat /proc/cpuinfo | grep "cpu cores" | uniq # 每物理 CPU 核数
cat /proc/cpuinfo | grep "processor" | wc -l # 逻辑 CPU 数四种 CPU 异常场景排查
| 场景 | 原因 | 排查 |
|---|---|---|
| 负载高 + 利用率低 | IO 密集:大量任务等磁盘 → 大量 D 状态进程 | top 看负载 → ps -aux 查 D 状态进程 |
| 负载低 + 利用率高 | 计算密集:任务少但每个耗时长(代码问题) | top 找 CPU 最高进程直接定位 |
| 利用率 100% | 单进程打满 | top → top -Hp pid 找线程 → printf "0x%x\n" 线程ID 转十六进制 → jstack pid | grep '0x...' -C5 定位代码(jstack 参数是 Java 进程 PID 不是线程 PID) |
| 慢 SQL/死锁拖垮 | 全表扫描 IO 阻塞 → D 状态堆积 | MySQL 慢查询日志 / 死锁检测 |
命令速查(按场景)
文件与权限
| 需求 | 命令 |
|---|---|
| 查看文件 | cat(全量)/ more(分页)/ less(分页可回翻)/ tail -fn 100(尾部)/ head(头部) |
| 权限修改 | chmod u+x file / chmod 751 file / chmod u=rwx,g=rx,o=x / chmod -R 递归 |
| 属主修改 | chown user:group file |
| 硬/软链接 | ln file link(硬)/ ln -s source link(软) |
| 查找文件 | find / -name "x*"(慢但准)/ locate(快靠索引)/ which(PATH 找可执行)/ whereis(二进制+文档) |
| 统计 | wc -l/-w/-c 行数/单词/字节 |
进程与任务
| 需求 | 命令 |
|---|---|
| 查看进程 | ps -ef / ps -aux / ps -ef | grep xxx |
| 后台运行 | 命令 &;jobs -l 看后台;fg 调前台;bg 恢复后台 |
| 终止进程 | kill -9 pid;kill -l 看所有信号 |
| 环境变量 | env(全部)/ env $HOME(单个);export PS1='[\u@\h\w]\$' 改提示符 |
磁盘与网络
| 需求 | 命令 |
|---|---|
| 磁盘空间 | df -hl(文件系统级,含元数据)/ du(目录文件级,用户程序) |
| 网络连通 | ping / netstat / ifconfig(IP 与接口) |
| 防火墙 | iptables |
du vs df 区别(高频追问):df 查文件系统的磁盘分配图、考虑元数据(inode/超级块等);du 是用户级程序、不考虑元数据。所以 df 才是"真实"文件系统占用。
文本处理
grep:正则搜索,grep -i忽略大小写,grep -v取反。awk -F ':' '{print $1"\t"$7}':按分隔符取列。- 通配符:
?单字符 ·*任意多字符 ·[charset]字符集。
网站访问慢排查(实战套路)
- 先定用户端还是服务端:自己访问试试,快则用户端问题;不要上来查服务端。
- 服务端慢 → 浏览器调试看哪一项加载慢(图片/数据)。
- 看资源:云平台监控 /
top看 CPU/MEM /sar看网卡流量(判断是否被攻击)。 - 硬件正常 → 查日志:MySQL 慢查询日志找慢 SQL。
- 解决:加带宽 · SQL 优化 · 加 Redis 缓存 · MySQL 主从读写分离 · CDN · 架构拆分(专角色专用)。
Linux 性能调优方法(清单)
关闭无用 daemon · 关闭 GUI · 调内核参数(sysctl)· 处理器子系统调优 · 内存子系统调优 · 文件系统调优 · 网络子系统调优。
不变量(必须成立的约束)
- D 状态进程无法终止,只能等资源恢复或重启系统。
- 判断负载是否过高,必须除以逻辑核数(单核 1、4 核 4)。
- 排查永远从源头定性开始(用户端/服务端 → 资源 → 日志),不要一上来 kill 进程。
常见误解
- 以为"CPU 100% 就是负载高" → 利用率与负载是两个维度,可能一个满一个低。
- 以为
du和df一样 → du 是用户级统计,df 才是文件系统真实占用。 - 以为
kill -9是唯一终止方式 → 先kill(SIGTERM)优雅退出,-9是最后手段。
关联
- 总览:Linux技术栈总览
- 面试:面试题蒸馏卡:Linux与Shell
- 深挖 top:top命令速查
- 应用层排障:面试题蒸馏卡:应用服务内存与CPU爆满排查