服务器又卡了?10条Linux命令5分钟定位性能瓶颈
文章目录
- 1. 定位高CPU占用进程
- 2. 查看高内存占用进程
- 3. 检查指定端口被哪个进程占用
- 4. 列出所有监听端口及对应进程
- 5. 分析Swap使用情况及占用进程
- 6. 检查磁盘空间使用情况
- 7. 定位大文件或大目录
- 8. 查看系统负载情况
- 9. 检测僵尸进程(Zombie Processes)
- 10. 识别异常网络连接(潜在攻击迹象)
- 故障排查通用流程建议
- 重要原则:
本文整理10条关键
Linux命令,配合详细使用方法与场景说明,助你高效排查
CPU、内存、端口、磁盘、
Swap等核心资源异常。
在日常运维中,快速定位问题是保障系统稳定的第一步。Linux系统本身提供了丰富的诊断工具,掌握以下命令组合,可在5分钟内完成初步故障分析。
1. 定位高CPU占用进程
命令:
ps aux --sort=-%cpu | head -n 11
自定义参考
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%
", $1, $2, $3}'
使用说明:
该命令按CPU使用率降序列出前11个进程。重点关注 %CPU 列和 COMMAND 列。若某进程持续占用过高CPU(如 >80%),需进一步分析其行为。
注意事项:
多核系统中,单进程CPU使用率可能超过100%(例如4核系统最大为400%)。
若 kswapd0 进程CPU占用高,通常反映内存不足,应优先检查内存与Swap使用情况。
2. 查看高内存占用进程
命令:
ps aux --sort=-%mem | head -n 11
自定义参考
ps -eo pid,comm,rss --no-headers | sort -k3 -nr | head -5 | awk '{printf "PID: %6s | Process: %-20s | MEM: %7.2f GB
", $1, $2, $3/1024/1024}'
使用说明:
按物理内存(RSS)使用量排序,识别内存消耗大户。结合 free -h 查看整体内存状态,避免误判缓存(buff/cache)为实际内存压力。
关键指标:
%MEM:进程占用物理内存百分比
RSS:实际使用的物理内存大小(KB)
3. 检查指定端口被哪个进程占用
命令:
ss -tulnp | grep :<端口号>
例如检查80端口:
ss -tulnp | grep :80
使用说明:
当服务启动失败并提示“Address already in use”时,此命令可快速定位占用端口的PID及程序名。
输出示例:
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))
其中 pid=1234 即为占用进程ID。
替代方案:
lsof -i :80 功能类似,但 ss 性能更优,推荐在生产环境使用。
4. 列出所有监听端口及对应进程
命令:
ss -tulnp
使用说明:
全面查看系统当前监听的TCP/UDP端口及其所属进程,适用于安全审计或服务状态核查。
参数解释:
-t:TCP连接
-u:UDP连接
-l:仅显示监听状态
-n:以数字形式显示地址和端口(避免DNS解析延迟)
-p:显示进程信息
5. 分析Swap使用情况及占用进程
步骤一:查看Swap总体使用
free -h
若 Swap 行中 used 值显著大于0,说明系统已开始使用交换分区,可能影响性能。
步骤二:定位具体占用Swap的进程(需root权限)
for file in /proc/*/status; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k2 -n -r | head
典型场景:
Java应用因堆内存设置不合理,频繁触发Full GC并导致大量内存换出至Swap,表现为系统IO飙升、响应迟缓。
6. 检查磁盘空间使用情况
命令:
df -h
使用说明:
以人类可读格式(GB/MB)展示各挂载点的磁盘使用率。重点关注 /、/var、/home 等关键分区。
告警阈值:
使用率 ≥90%:需立即处理
使用率 ≥95%:可能导致服务写入失败甚至崩溃
7. 定位大文件或大目录
命令(在目标目录下执行):
du -sh * | sort -hr
使用流程:
通过 df -h 确定空间紧张的分区(如 /var)
进入该目录:cd /var
执行上述命令,按大小排序子目录
逐层深入,直至定位具体大文件(如日志、缓存、core dump等)
扩展技巧:
查找全系统大于100MB的文件(忽略权限错误):
find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | head -n 20
8. 查看系统负载情况
命令:
uptime
输出示例:
19:30:01 up 10 days, load average: 4.20, 3.80, 2.90
解读:
三个数值分别表示过去1分钟、5分钟、15分钟的平均负载。
对于N核CPU系统,负载长期 > N 表示存在资源瓶颈
负载高 ≠ CPU高,也可能由IO等待(D状态进程)引起
辅助命令:
查看CPU核心数:
nproc
9. 检测僵尸进程(Zombie Processes)
命令:
ps aux | awk '$8 ~ /^[Zz]/'
说明:
僵尸进程是已终止但未被父进程回收的子进程,状态为 Z。虽不消耗CPU/内存,但会占用进程表项。大量僵尸进程可能导致系统无法创建新进程。
处理建议:
通常需重启其父进程
若父进程为init(PID=1),系统会自动清理,无需干预
10. 识别异常网络连接(潜在攻击迹象)
命令:
ss -tn | tail -n +2 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
用途:
统计每个远程IP的TCP连接数,用于发现暴力破解、DDoS或异常爬虫行为。
应对措施:
结合防火墙(iptables/firewalld)或云平台安全组封禁可疑IP
检查认证日志:grep "Failed" /var/log/secure(CentOS)或 /var/log/auth.log(Ubuntu)
故障排查通用流程建议
观察现象:服务不可用?响应慢?写入失败?
检查负载:uptime判断系统整体压力
分资源排查:CPU→ps aux --sort=-%cpu
内存/Swap→free -h + 进程内存排序
磁盘→df -h + du -sh
网络→ss -tulnp + 连接统计
定位进程:结合PID进一步分析(日志、strace、lsof等)
处理与验证: 修复后持续观察指标是否恢复正常
重要原则:
不要依赖重启解决问题。只有理解根本原因,才能实现真正的系统稳定性。
为什么说这一句呢!因我在某项目上经常由项目导致资源问题甲方要求重启让占用释放,我只能默默地配合。









