温馨提示×

ubuntu进程占用内存高怎么查

小樊
48
2026-10-24 09:54:50
栏目: 智能运维

在 Ubuntu 上排查“进程占用内存高”的问题,可以从看现象 → 定位进程 → 分析内存类型 → 进一步诊断一步步来。


一、快速看整体内存使用情况

1. free

free -h

关注:

  • used 高不高
  • available 是否很小
  • buff/cache 是否很大(这部分通常可回收)

2. top / htop

top
# 或
htop
  • 按 M 按内存排序
  • 看 RES(实际物理内存)和 VIRT(虚拟内存)

安装 htop(更好用):

sudo apt install htop

二、定位具体进程

1. 按内存排序进程

ps aux --sort=-%mem | head

字段说明:

  • %MEM:占用物理内存百分比
  • RSS:实际使用的内存(KB)

2. 查看某个进程详细信息

cat /proc/<PID>/status

重点看:

  • VmRSS:实际物理内存
  • VmSize:虚拟内存
  • Threads:线程数(线程多也会吃内存)

三、区分“真内存高”还是“看起来高”

1. 缓存问题(常见误区)

Linux 会把空闲内存用于 buffer/cache:

free -h

如果 available 还很大,一般不用慌。

清理缓存(不建议随便用):

sudo sync && sudo sysctl vm.drop_caches=3

2. 共享内存

多个进程可能共享同一段内存(如 libc、数据库)。

查看:

smem -t

安装:

sudo apt install smem

四、深入分析某个进程

1. 查看进程内存映射

pmap -x <PID>

可看到:

  • 堆(heap)
  • 栈(stack)
  • 共享库
  • 匿名内存

2. 是否有内存泄漏(开发程序)

  • C/C++:用 valgrind
valgrind --tool=memcheck ./your_program
  • Java:看堆配置
jstat -gc <PID>
  • Python:
pip install memory_profiler

五、常见高内存原因排查清单

✅ 是否在跑:

  • 数据库(MySQL / PostgreSQL)
  • Docker 容器
  • Java 服务(JVM 堆太大)
  • 日志或缓存进程

✅ 是否:

  • 线程数异常多
  • 文件句柄泄漏
  • 大文件加载到内存

六、实用一条命令总结

ps -eo pid,ppid,cmd,%mem,rss --sort=-%mem | head

如果你愿意,可以告诉我:

  • 是 某个具体进程(如 java / mysqld / docker)
  • 还是 整机内存莫名其妙涨
  • 或者是 服务器卡顿

我可以给你更针对性的排查方案。

0 踩