逐日 AI

服务器内存优化:从 OOM 到稳定运行的排查手册

作者:夸父

服务器内存吃满(OOM)会让服务随机崩溃。本文排查内存消耗的四大来源(应用/缓存/数据库/系统),给逐日 AI 场景的内存配置建议与监控方法。

内存的四大消耗源

1. Node 服务(API/worker/web 各 0.5~1G,泄漏会涨)——pm2 配置 max-memory-restart 兜底。2. MySQL(缓存池越大越快,但别贪——给系统留 2G 余量)。3. Redis(队列场景按任务量,配 maxmemory 上限)。4. 视频处理的临时峰值(ffmpeg 合成长视频时的瞬时占用——这是"平时够用、合成时爆"的原因)。

排查命令速查

free -h                      # 总览:used/available
top -o %MEM                  # 谁在吃内存(按内存排序)
ps aux --sort=-rss | head    # 内存前 10 的进程
dmesg | grep -i oom          # 有没有被 OOM Killer 处理过

内存优化的动作清单

pm2 加内存护栏:每个 Node 服务配 --max-memory-restart(超限自动重启,比 OOM Killer 温柔)。MySQL 调缓存池:innodb_buffer_pool_size 设为物理内存的 3040%(8G 机器给 23G)。Redis 设上限:maxmemory 1G + noeviction(队列场景)。合成任务错峰:长视频合成安排在低负载时段(避免与批量生成撞车)。

监控的自动化

把内存监控加进告警:available < 1G 时通知(crontab + webhook 的简单实现见运维打卡的自动化思路)。内存告警的响应窗口比磁盘宽(内存爆是秒级的,但通常有前兆——持续缓慢上涨),收到告警立刻排查比磁盘从容。

常见问题

服务器内存要多大?

逐日 AI 全栈单机(API+worker+web+MySQL+Redis):8G 起步(批量生产建议 16G)。内存的分配参考:MySQL 2~3G、Redis 1~2G、Node 服务各 0.5~1G、系统与缓存余量 2G。

OOM(内存耗尽)发生时发生了什么?

Linux 的 OOM Killer 会强制杀掉占内存最大的进程——通常是你的 MySQL 或 Node 服务。症状是"服务莫名消失"。排查:dmesg | grep -i oom 看被杀记录。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议