当前位置:首页>Linux>Linux内存占用排查|TOP命令实战,精准揪出耗内存服务

Linux内存占用排查|TOP命令实战,精准揪出耗内存服务

  • 2026-10-11 06:04:19
Linux内存占用排查|TOP命令实战,精准揪出耗内存服务

一、常用4条排查命令(生产通用,一键查看内存大户)

前置区分:buff/cache是系统缓存、不占业务内存;**used上涨 = 进程堆内存占用,必须查进程**

1. top(系统自带,最通用)

top
  1. 进入后按 M:按内存从高到低排序(RES实际物理内存)
  2. 字段释义:
    • VIRT:进程虚拟内存(申请地址空间,参考即可)
    • RES:真实占用物理内存(重点)
    • %MEM:占整机物理内存百分比
  3. 按 P 切回CPU排序,q退出。

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个内存字段怎么分析

  1. %MEM:单进程占用整机内存比例
    • 你的服务器14G内存,单个进程%MEM>10%≈占用1.4G以上,重点观察
  2. RES:进程常驻物理内存(真实吃掉RAM)
  3. SHR:共享库内存,多程序共用,不计重复占用

误区:VIRT大不用慌,只是程序预申请内存;RES飙升才是内存泄漏/配置过大。

三、分步内存分析思路(落地排查流程)

步骤1:整体大盘

free -h

  • available持续走低、Swap开始上涨 → 内存资源紧张,立刻查高占用进程
  • available充足(如你的9.1G可用):哪怕个别进程占用偏高,暂时不影响稳定性。

步骤2:定位占用TOP3服务

举例常见占用大户:Java程序、MySQL、Redis、Nginx、消息队列。

  1. Java服务
    • 占用过高:JVM-Xmx堆参数配置过大,远超业务所需,修改启动脚本-Xms -Xmx;
    • 频繁内存上涨:代码内存泄漏,导出dump快照分析。
  2. MySQL
    • innodb_buffer_pool_size参数过大(常规建议物理内存50%以内),调小my.cnf。
  3. Redis
    • maxmemory配置不合理,大量数据全放内存,设置淘汰策略。

步骤3:区分「正常占用」&「异常泄漏」

  • 平稳占用:启动后内存数值长期固定不变 → 配置合理,无需优化;
  • 缓慢持续上涨、只涨不跌 → 内存泄漏,代码/配置故障,必须优化。

四、实操:结合你14G服务器现场分析

Mem:14Gi total|used5.7Gi|available9.1Gi

整机业务只占用5.7G,资源宽裕:

  1. 若TOP第一进程占用2G左右:属于正常业务负载,不用优化;
  2. 单进程突然从500M涨到3G:异常泄漏,排查应用日志。

五、实用排查小脚本(一键导出内存报表)

#输出前10大内存进程,保存日志ps aux --sort=-%mem | head -10 > mem_top.logcat mem_top.log

六、配套优化方案

  1. 配置优化:数据库、中间件调低内存上限,适配服务器物理规格;
  2. 程序优化:泄漏应用迭代修复代码,增加定时重启(临时方案);
  3. 资源扩容:所有服务优化完毕,整体used仍逼近总内存70%,再升级服务器内存。

文末总结口诀

看内存先分缓存与进程, top按M排序找元凶, VIRT虚存不用管,RES实存是核心, 稳步上涨属正常,只涨不跌查泄漏。

#Linux内存排查 #进程分析 #运维排错

IT技术交流群:

软件接单交流群:

体验营销二维码

最新文章

随机文章