服务器响应慢、卡顿是什么原因?怎么解决?

服务器响应变慢、服务无法启动、磁盘空间告急……面对这些常见故障,盲目重启不仅治标不治本,还可能掩盖真实问题。
本文整理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 208. 查看系统负载情况
命令:
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核心数:
nproc9. 检测僵尸进程(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等)处理与验证: 修复后持续观察指标是否恢复正常
重要原则:
不要依赖重启解决问题。只有理解根本原因,才能实现真正的系统稳定性。
为什么说这一句呢!因我在某项目上经常由项目导致资源问题甲方要求重启让占用释放,我只能默默地配合。
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



