本文整理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%%n", $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 GBn", $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. 检查磁盘空间使用情况
命令:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'0使用说明:
以人类可读格式(GB/MB)展示各挂载点的磁盘使用率。重点关注 /、/var、/home 等关键分区。
告警阈值:
使用率 ≥90%:需立即处理使用率 ≥95%:可能导致服务写入失败甚至崩溃
7. 定位大文件或大目录
命令(在目标目录下执行):
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'1使用流程:通过 df -h 确定空间紧张的分区(如 /var)进入该目录:cd /var执行上述命令,按大小排序子目录逐层深入,直至定位具体大文件(如日志、缓存、core dump等)扩展技巧:
查找全系统大于100MB的文件(忽略权限错误):
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'28. 查看系统负载情况
命令:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'3输出示例:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'4解读:
三个数值分别表示过去1分钟、5分钟、15分钟的平均负载。
对于N核CPU系统,负载长期 > N 表示存在资源瓶颈负载高 ≠ CPU高,也可能由IO等待(D状态进程)引起辅助命令:
查看CPU核心数:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'59. 检测僵尸进程(Zombie Processes)
命令:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'6说明:
僵尸进程是已终止但未被父进程回收的子进程,状态为 Z。虽不消耗CPU/内存,但会占用进程表项。大量僵尸进程可能导致系统无法创建新进程。
处理建议:
通常需重启其父进程若父进程为init(PID=1),系统会自动清理,无需干预
10. 识别异常网络连接(潜在攻击迹象)
命令:
ps -eo pid,comm,%cpu --no-headers | sort -k3 -nr | head -11 | awk '{printf "PID: %6s | Process: %-20s | CPU: %6.1f%%n", $1, $2, $3}'7用途:
统计每个远程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等)处理与验证: 修复后持续观察指标是否恢复正常
重要原则:
不要依赖重启解决问题。只有理解根本原因,才能实现真正的系统稳定性。
为什么说这一句呢!因我在某项目上经常由项目导致资源问题甲方要求重启让占用释放,我只能默默地配合。
📬 关注我
推荐阅读
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...