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/ 被手动调高过。
- 别直接
kill -9日志里的进程——它大概率只是替罪羊,真凶可能是其子进程或上游服务 - 查完日志立刻执行
ps aux --sort=-%mem | head -5,对比当前活进程和日志里死掉的,看是否同一类应用反复中招 - 如果
systemd、sshd或数据库主进程出现在日志里,说明系统已濒临瘫痪,需立即人工介入
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/journal(journalctl --vacuum-size=100M)或删旧日志;长期要配置logrotate限制文件数 - 注意:
rm删除后df -i不立刻下降——得等持有该 inode 的进程关闭句柄,常见于未重启的 Java 服务或长期运行的脚本
lsof | grep delete 发现“幽灵占用”最让人后怕
磁盘空间明明 df -h 显示还剩 20G,du -sh / 却只统计出 5G,差额去哪儿了?大概率是“已删除但未释放”的文件——进程还在读写它,内核不敢回收空间。
执行 lsof | grep delete,输出里带 deleted 字样的行就是元凶。第 7 列是字节数,加起来往往就是那“消失的 15G”。
- 关键字段是
PID和COMMAND,用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栅格系统


