Linux 系统变慢通常是资源供需失衡导致的建议按 CPU、内存、磁盘 I/O、网络的顺序依次排查优先使用 top、free、iostat 等基础命令定位瓶颈。先说结论系统卡顿本质是核心资源被过度占用需先定位具体瓶颈资源再针对性处理异常进程或配置最后验证负载是否回落。先定位使用 top 查看负载free 查看内存iostat 查看磁盘ss 查看网络确定哪类资源打满。先做确认进程非核心业务后使用 kill -15 优雅终止内存不足可清理缓存需谨慎或扩容磁盘忙可找出高 IO 进程。再验证观察负载平均值是否下降业务响应时间是否恢复正常日志是否不再报错。生产环境操作安全警告在执行任何优化操作前请务必注意以下风险禁止盲目重启重启会丢失现场信息导致无法定位根因仅在系统完全无响应时作为最后手段。谨慎终止进程直接 kill 可能导致数据丢失或服务中断。务必确认进程非核心业务优先使用kill -15 PID优雅终止避免直接使用 kill -9。清理缓存风险手动清理缓存会触发磁盘 IO 飙升严禁在业务高峰期执行drop_caches操作。备份配置修改系统参数前请备份原配置文件。命令速用版与输出解读以下是排查过程中最常用的几条命令可直接在终端执行并附带正常与异常输出对比top # 查看 CPU 负载和进程占用 free -h # 查看内存和 Swap 使用情况 iostat -x 1 # 查看磁盘 IO 等待和利用率 ss -s # 查看网络连接状态统计 dmesg | grep -i oom # 检查是否有内存溢出杀进程记录top 负载对比正常情况4 核 CPUload 4top - 10:00:00 up 10 days, 1 user, load average: 0.50, 0.40, 0.35异常情况负载过高top - 10:00:00 up 10 days, 1 user, load average: 24.00, 18.01, 12.05iostat 磁盘对比正常情况%util 80%Device %util await sda 20.00 5.00异常情况IO 瓶颈Device %util await sda 100.00 500.00分步处理1. 检查 CPU 负载执行top命令关注 load average 值。若 1 分钟负载远超 CPU 核心数说明系统过载。按P键按 CPU 占用排序找出消耗最高的进程。区分是用户态 (%us) 还是内核态 (%sy) 占用高。2. 检查内存使用执行free -h关注 available 值。若 available 接近 0 且 swap used 明显增长大概率是内存泄漏或配置不当。检查dmesg输出是否有Out of memory记录。若确需释放页缓存可执行sync; echo 3 /proc/sys/vm/drop_caches。警告此操作会触发磁盘 IO 飙升生产环境严禁在业务高峰期执行仅作为临时应急手段。3. 检查磁盘 I/O执行iostat -x 1关注%util 和 await 列。若%util 接近 100% 且 await 数值较高说明 I/O 成为瓶颈。使用iotop定位具体是哪个进程在大量读写。4. 检查网络连接执行ss -s或netstat -s检查 TCP 重传、连接队列溢出或 TIME_WAIT 堆积。丢包或连接数打满也会导致服务“变慢”。5. 检查系统日志使用journalctl或查看/var/log/messages查找与卡顿时间点相关的错误信息或警告。典型高负载场景实战场景Java 应用 CPU 飙高使用top -H -p PID找到占用 CPU 最高的线程 ID。将线程 ID 转换为 16 进制printf %x\n 线程 ID。使用jstack PID | grep 16 进制线程 ID -A 20查看堆栈信息。定位代码死循环或频繁 GC 问题。场景磁盘 IO 等待过高使用iostat -x 1确认%util 持续 100%。使用iotop -oP找出读写最高的进程。若是日志打印过多调整日志级别若是数据库慢查询优化 SQL 或增加索引。怎么验证是否生效处理完成后再次运行top观察 load average 是否回落至正常范围。业务侧确认页面加载速度或接口响应时间恢复。检查系统日志不再新增相关报错。若之前有监控告警确认告警是否停止触发。常见坑不要盲目重启服务器这大概率治标不治本且可能丢失现场信息。kswapd0 进程 CPU 使用率高通常意味着物理内存不够用需优化应用或增加内存而非单纯杀进程。很多“慢”本质是下游响应延迟传导上来排查时别忘了验外部依赖如 DNS、数据库、RPC 或存储挂载点。top 命令中 buff/cache 占用高不一定是问题Linux 会利用空闲内存做缓存主要看 available 值。终止进程前务必确认该进程是否为系统核心服务如 sshd、systemd 等误杀可能导致无法远程连接。来源 https://www.zjcp.cc/ask/10925.html