讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux 系统卡顿问题解决方案

秋墨同学_7270

秋墨同学_7270

发布时间:2026-02-15 11:17:45

|

647人浏览过

|

来源于php中文网

原创

%CPU长期超90%却找不到进程,主因是短生命周期进程干扰或进程名截断;应使用top -b -n 1和ps aux --sort=-%cpu定位,并检查内核线程、shell脚本及I/O、内存、swap真实状态。

linux 系统卡顿问题解决方案

top 命令里看到 %CPU 长期超 90%,但找不到具体进程?

Linux 卡顿最常见原因是某个进程偷偷吃满 CPU,但 top 默认按 CPU 排序时,可能被短生命周期进程(比如 shell 脚本启的临时子进程)干扰,或者进程名太短、被截断,看不出真实身份。

实操建议:

  • 运行 top -b -n 1 | head -20 抓快照,避免交互式刷新掩盖瞬时峰值
  • 用 ps aux --sort=-%cpu | head -15 看更稳定的排序结果,--sort=-%cpu 强制降序且不依赖交互状态
  • 重点关注 ps 输出中 COMMAND 列末尾带 [...] 的进程(内核线程),它们通常不占 CPU,但若出现异常高占用,可能是硬件驱动或内核模块问题
  • 如果看到大量 sh 或 bash 进程 CPU 高,别急着 kill,先用 ls -l /proc/<pid>/cwd</pid> 和 cat /proc/<pid>/cmdline | tr '\0' ' '</pid> 查它在跑什么脚本

df -h 显示磁盘没满,但 iotop 显示 I/O 百分比长期 95%+?

磁盘空间充足 ≠ I/O 不瓶颈。小文件随机读写、日志刷盘、swap 频繁交换都会让 I/O 队列堆积,系统响应变慢,尤其在机械硬盘或低配云盘上更明显。

实操建议:

  • 运行 iotop -oP(只显示实际 I/O 进程 + 只显示有 I/O 的进程),重点看 IO> 列,不是 SWAPIN
  • 检查 /var/log/journal/ 是否过大:systemd-journald 默认不限大小,日志暴涨会引发持续写入,用 journalctl --disk-usage 查,用 journalctl --vacuum-size=200M 限制
  • 确认是否启用 swap:即使内存够,内核仍可能把匿名页换出,用 swapon --show 和 cat /proc/swaps 核对;若非必要,用 swapoff /dev/sdXn 关掉并注释 /etc/fstab 中对应行
  • SSD 用户注意:vm.swappiness=1 比默认 60 更合理,减少无谓 swap 倾倒

明明 free -h 显示还有 2G 内存,系统却频繁卡死?

Linux 的“空闲内存”不等于“可用内存”。内核会把大量内存用于 page cache 和 slab 缓存,这部分在需要时可快速回收。但当缓存碎片化严重、或分配大块连续内存失败(如某些驱动、DMA 场景),就会触发直接回收甚至 OOM killer。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载

实操建议:

  • 看 cat /proc/meminfo | grep -E "^(MemAvailable|Buffers|Cached|SReclaimable)",重点是 MemAvailable —— 它才是内核估算的真正可用量
  • 如果 MemAvailable 远低于 free 显示值,说明 slab 缓存(尤其是 SReclaimable)占了大头,可能是 dentry/inode 缓存未及时释放,常见于大量小文件操作后
  • 临时缓解:运行 echo 2 > /proc/sys/vm/drop_caches(仅清 page cache + slab,不影响运行中进程),但别加到定时任务——治标不治本
  • 长期方案:检查是否有程序泄漏 inotify 句柄或未关闭的 epoll 实例,用 lsof -p <pid> | wc -l</pid> 对比句柄数是否异常增长

重启后卡顿消失,过几小时又复发,且 dmesg 里有 Out of memory: Kill process?

这不是偶然 OOM,而是内存泄漏或资源未释放的明确信号。OOM killer 杀掉的只是“替罪羊”,真正的问题往往藏在被杀进程的上游:比如一个 Python 服务不断 fork 子进程但不 wait,或 Node.js 应用未正确处理 stream 错误导致 socket 积压。

实操建议:

  • 立即执行 dmesg -T | tail -30,找最近一次 OOM 时间点,再用 journalctl --since "2024-05-20 14:22:00"(填你看到的时间)查当时服务日志
  • 用 ps aux --sort=-vsz | head -10 查虚拟内存(VSZ)最大的进程,它未必是 CPU 高的那个,但很可能是泄漏源
  • 对可疑进程,用 cat /proc/<pid>/status | grep -E "^(VmRSS|VmSize|Threads|SigQ)"</pid> 看 RSS 是否随时间缓慢上涨,SigQ 值极大(如 65535/65535)说明信号队列塞满,常因异步处理逻辑卡死
  • 不要只盯着应用层:某些旧版 NVIDIA 驱动、Realtek 网卡固件在特定负载下也会缓慢泄漏 kernel memory,slabtop 里观察 kmalloc-* 或 kmalloc-rcl- 行是否持续增长

卡顿的根因从来不在“系统太老”或“配置太低”,而在资源使用路径上的某处没关严的阀门。查的时候少看平均值,多盯瞬时峰值;别信“应该没问题”,要验证每个环节的真实压力反馈。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6287

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2648

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4458

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4596

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1395

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1818

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

10143

2023.08.17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn