Linux服务器卡顿?这几条命令帮我查出真凶
作为运维人员,最怕的就是半夜被报警短信吵醒:“服务器响应超时”。上周我就遇到了这样的紧急情况——一台线上服务器突然变得异常卡顿,用户投诉不断。经过一番排查,最终靠几个简单的命令锁定了问题根源。今天就把这次实战经验分享给大家,下次遇到类似情况时你也能快速定位问题。
第一步:快速查看系统负载情况
遇到服务器卡顿,我首先会使用 top
命令查看整体情况。这个命令能直观显示CPU、内存使用率,以及哪些进程最耗资源。
top
运行后重点关注几个指标:load average(系统负载)、%CPU(CPU使用率)、%MEM(内存使用率)。如果load average持续高于CPU核心数,说明系统确实过载了。那次故障中,我发现load average竟然达到了15(而服务器只有4核),明显异常。
第二步:深入分析进程资源占用
发现系统负载异常后,需要找出具体的“罪魁祸首”。我习惯用 ps
命令配合排序参数:
ps aux --sort=-%cpu | head -10
这个命令会按CPU使用率降序排列,显示前10个最耗CPU的进程。同样地,查看内存占用最大的进程:
ps aux --sort=-%mem | head -10
在实际排查中,我发现一个Java进程占用了98%的CPU,这显然不正常。
第三步:检查内存和交换空间
内存不足也会导致严重卡顿。使用 free -h
可以直观查看内存使用情况:
free -h
那次故障中,虽然内存还有剩余,但swap使用率很高,说明物理内存不足,系统正在使用交换空间,这会显著降低性能。
第四步:监控磁盘I/O状况
磁盘I/O瓶颈也是常见原因。我使用 iostat
来监控磁盘活动:
iostat -x 1
重点关注 %util
列,如果持续接近100%,说明磁盘已经饱和。配合 iotop
命令可以查看具体是哪些进程在大量读写磁盘:
iotop
第五步:网络连接分析
网络问题也可能表现为服务器卡顿。使用 netstat
查看网络连接状态:
netstat -anp | grep ESTABLISHED | wc -l
这个命令可以统计当前建立的连接数。如果连接数异常多,可能需要进一步分析。
实战总结与避坑提示
通过以上排查,我最终定位到问题:一个配置错误的定时任务导致Java进程陷入死循环,疯狂消耗CPU资源。解决后,服务器立即恢复正常。
经验分享:
- 养成定期监控系统性能的习惯,不要等出了问题才排查
- 重要的生产环境一定要设置资源使用告警
- 这些命令在大多数Linux发行版都可用,建议记在备忘录里
- 如果条件允许,使用更专业的监控工具如Prometheus会更高效
希望这些经验能帮你在遇到服务器卡顿时快速找到问题根源。记住,好的运维不是不会遇到问题,而是能快速解决问题。
top命令一看吓一跳,load average都爆了 😱
free -h发现swap飙高,八成是内存吃紧了