一、常用4条排查命令(生产通用,一键查看内存大户)
前置区分:buff/cache是系统缓存、不占业务内存;**used上涨 = 进程堆内存占用,必须查进程**
1. top(系统自带,最通用)
top
- 进入后按 M:按内存从高到低排序(RES实际物理内存)
2. ps 静态排序(导出报表、统计用)
# 按内存降序,展示PID、内存、进程名ps -aux --sort=-rss | head -15# RSS单位KB,换算G:/1024/1024
3. htop(可视化,推荐安装)
#CentOSyum install htop -y#Ubuntuapt install htop -yhtop
鼠标点PERCENT_MEM直接排序,直观看到服务占用,F9一键杀异常进程。
4. 精准统计单个进程 / 服务
#筛选mysql、java、nginx等ps -aux | grep java
二、关键指标区分:3个内存字段怎么分析
- 你的服务器14G内存,单个进程%MEM>10%≈占用1.4G以上,重点观察
误区:VIRT大不用慌,只是程序预申请内存;RES飙升才是内存泄漏/配置过大。
三、分步内存分析思路(落地排查流程)
步骤1:整体大盘
free -h
- available持续走低、Swap开始上涨 → 内存资源紧张,立刻查高占用进程
- available充足(如你的9.1G可用):哪怕个别进程占用偏高,暂时不影响稳定性。
步骤2:定位占用TOP3服务
举例常见占用大户:Java程序、MySQL、Redis、Nginx、消息队列。
- 占用过高:JVM-Xmx堆参数配置过大,远超业务所需,修改启动脚本
-Xms -Xmx; - 频繁内存上涨:代码内存泄漏,导出dump快照分析。
- innodb_buffer_pool_size参数过大(常规建议物理内存50%以内),调小my.cnf。
- maxmemory配置不合理,大量数据全放内存,设置淘汰策略。
步骤3:区分「正常占用」&「异常泄漏」
- 平稳占用:启动后内存数值长期固定不变 → 配置合理,无需优化;
- 缓慢持续上涨、只涨不跌 → 内存泄漏,代码/配置故障,必须优化。
四、实操:结合你14G服务器现场分析
Mem:14Gi total|used5.7Gi|available9.1Gi
整机业务只占用5.7G,资源宽裕:
- 若TOP第一进程占用2G左右:属于正常业务负载,不用优化;
- 单进程突然从500M涨到3G:异常泄漏,排查应用日志。
五、实用排查小脚本(一键导出内存报表)
#输出前10大内存进程,保存日志ps aux --sort=-%mem | head -10 > mem_top.logcat mem_top.log
六、配套优化方案
- 配置优化:数据库、中间件调低内存上限,适配服务器物理规格;
- 程序优化:泄漏应用迭代修复代码,增加定时重启(临时方案);
- 资源扩容:所有服务优化完毕,整体used仍逼近总内存70%,再升级服务器内存。
文末总结口诀
看内存先分缓存与进程, top按M排序找元凶, VIRT虚存不用管,RES实存是核心, 稳步上涨属正常,只涨不跌查泄漏。
#Linux内存排查 #进程分析 #运维排错