欢迎光临
我们一直在努力

服务器又卡了?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%%\\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 GB\\n", $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等) 处理与验证: 修复后持续观察指标是否恢复正常

重要原则:

不要依赖重启解决问题。只有理解根本原因,才能实现真正的系统稳定性。

为什么说这一句呢!因我在某项目上经常由项目导致资源问题甲方要求重启让占用释放,我只能默默地配合。

赞(0)
未经允许不得转载:171主机测评 » 服务器又卡了?10条Linux命令5分钟定位性能瓶颈
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址