Linux 系统资源突然耗尽的预警信号

发布时间 - 2026-01-29 00:00:00    点击率:
available 接近 0 就该警觉——它才是真实可用内存,低于总内存10%(如8G机器长期≤800M)表明内核正频繁交换,响应延迟明显;dmesg中“Killed process”即OOM已发生,需查oom_score_adj和RSS定位真凶。

free -h 显示 available 接近 0 就该警觉了

Linux 的 free -h 输出中,available 列才是你真正能用的内存——它已扣除内核预留、不可回收缓存等。很多人盯着 free 列看,结果发现“明明还有 200M free,怎么就 OOM 了?”,这就是典型误判。

available 持续低于总内存的 10%(比如 8G 机器长期 vmstat 1 5 中的 so(swap out)值若稳定 > 0,说明内核已在拼命把内存页写入磁盘,响应延迟会肉眼可感。

  • 别等 Out of memory: Kill process 日志出现才行动——那已是最后防线
  • buff/cache

    高不等于问题,但若 available 同步走低,说明缓存正在“挤占”可用空间
  • 云服务器尤其要注意:某些厂商监控只报 used%,而忽略 available,容易漏掉真实压力

dmesg 看到 “Killed process” 就是 OOM 已发生

一旦进程被内核强制终止,dmesg | grep -i "out of memory" 必定有输出,格式类似:
Out of memory: Kill process 12345 (python) score 892 or sacrifice child
这里的 score 是内核打的“死亡分数”,越高越可能被杀;python 是进程名,12345 是 PID。

这不是警告,是事故回溯证据。重点不是“谁被杀了”,而是“为什么它得分这么高”——通常因为 RSS(实际物理内存占用)过大,或 /proc//oom_score_adj 被手动调高过。

  • 别直接 kill -9 日志里的进程——它大概率只是替罪羊,真凶可能是其子进程或上游服务
  • 查完日志立刻执行 ps aux --sort=-%mem | head -5,对比当前活进程和日志里死掉的,看是否同一类应用反复中招
  • 如果 systemdsshd 或数据库主进程出现在日志里,说明系统已濒临瘫痪,需立即人工介入

df -i 显示 IUse% = 100% 时,磁盘“满”得无声无息

磁盘空间没满(df -h 显示 Use% touch 报错 No space left on device?十有八九是 inode 耗尽了。

每个文件、目录、软链接都占一个 inode,小文件多的场景(如日志轮转、Git 仓库、容器镜像层)极易触发。用 df -i 查看 IUse%,到 100% 就彻底锁死。

  • du --inodes -sh /var/log/* 可快速定位哪个目录塞满了小文件
  • 临时解法:清空 /var/log/journaljournalctl --vacuum-size=100M)或删旧日志;长期要配置 logrotate 限制文件数
  • 注意:rm 删除后 df -i 不立刻下降——得等持有该 inode 的进程关闭句柄,常见于未重启的 Java 服务或长期运行的脚本

lsof | grep delete 发现“幽灵占用”最让人后怕

磁盘空间明明 df -h 显示还剩 20G,du -sh / 却只统计出 5G,差额去哪儿了?大概率是“已删除但未释放”的文件——进程还在读写它,内核不敢回收空间。

执行 lsof | grep delete,输出里带 deleted 字样的行就是元凶。第 7 列是字节数,加起来往往就是那“消失的 15G”。

  • 关键字段是 PIDCOMMAND,用 ps -p -o pid,comm,args 确认进程用途
  • 运维最常踩的坑:对 nginx、rsyslog 这类常驻进程,直接 kill -HUP 就能重载并释放已删日志文件句柄,无需重启服务
  • 如果是业务进程(如 Python 脚本),得看代码里是否 open() 后忘了 close(),或用了 os.remove() 却没同步清理 file descriptor

资源耗尽从来不是突然发生的,只是信号藏得深:available 持续走低、so 值爬升、IUse% 拉满、lsof 里躺着 deleted 文件……这些都不是“可能出问题”,而是“已经出问题,只是还没爆炸”。盯住它们,比等告警邮件有用得多。


# linux  # python  # java  # git  # node  # nginx  # 云服务  # 字节  # ai  # 云服务器  # 内存占用  # 为什么  # sort  # var  # delete  # 数据库  # 才是  # 句柄  # 重启  # 就该  # 被杀  # 磁盘空间  # 让人  # 还没  # 还在  # 就能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  如何在腾讯云服务器快速搭建个人网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Python文本处理实践_日志清洗解析【指导】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在搬瓦工VPS快速搭建网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  JavaScript如何实现音频处理_Web Audio API如何工作?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  手机软键盘弹出时影响布局的解决方法  android nfc常用标签读取总结  魔方云NAT建站如何实现端口转发?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel如何实现文件上传和存储?(本地与S3配置)  JS经典正则表达式笔试题汇总  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  高防服务器租用如何选择配置与防御等级?  Laravel如何处理异常和错误?(Handler示例)  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何批量查询域名的建站时间记录?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  QQ浏览器网页版登录入口 个人中心在线进入  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  5种Android数据存储方式汇总  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  PythonWeb开发入门教程_Flask快速构建Web应用  韩国服务器如何优化跨境访问实现高效连接?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  JavaScript模板引擎Template.js使用详解  如何在建站之星网店版论坛获取技术支持?  Bootstrap整体框架之CSS12栅格系统