0

0

Linux 服务器出现大量 anon 页面但进程 RSS 不高怎么定位

舞夢輝影

舞夢輝影

发布时间:2026-01-17 23:12:08

|

609人浏览过

|

来源于php中文网

原创

RSS低而AnonPages高,说明匿名页未被进程RSS统计覆盖,常见原因包括内核内存分配、大页、进程退出后页未回收等;需结合/proc/meminfo、slabtop、page_owner、tmpfs检查及THP状态综合排查。

linux 服务器出现大量 anon 页面但进程 rss 不高怎么定位

这通常说明系统中存在大量匿名页(anon pages),但这些页面未被任何进程的 RSS 统计覆盖——最常见原因是 内核内存分配(如 slab、page cache 的 anon 部分)、大页(THP)、或进程已退出但页未及时回收。RSS 低而 anon 高,核心矛盾在于:RSS 只统计当前进程映射且活跃的匿名页,不包含内核占用、共享页、延迟释放页等。

查清 anon 页面真实归属

不要只看 /proc/meminfoAnonPages,它只是总和。需逐层下钻:

  • 运行 cat /proc/meminfo | grep -E "(AnonPages|Shmem|FilePages|SReclaimable|Slab)",观察 Shmem(tmpfs/shm)是否异常高——tmpfs 文件会被计入 AnonPages,但不计入任何进程 RSS;
  • 检查 /sys/kernel/debug/page_owner(需开启 CONFIG_PAGE_OWNER)可追溯每页分配,定位内核模块或驱动的匿名页泄漏;
  • slabtop -o 查看 slab 中 anon 相关缓存(如 kmalloc-*page-anon_vma)是否持续增长;
  • 运行 echo m > /proc/sysrq-trigger 后检查 dmesg,确认是否有 page allocation failure 或大量 direct reclaim。

排查 tmpfs 和 POSIX 共享内存

tmpfs 文件(/dev/shm、/run、自定义挂载点)的内容属于匿名页,但归属文件系统而非进程。即使进程已退出,只要文件未 unlink,页就一直驻留:

京点点
京点点

京东AIGC内容生成平台

下载
  • 执行 find /dev/shm /run -xdev -type f -ls 2>/dev/null | head -20,看是否有大文件残留;
  • ipcs -m 检查 System V 共享内存段,特别是 cpid 为 0 或 lpid 异常的段;
  • 检查应用是否使用 mmap(MAP_ANONYMOUS|MAP_SHARED) 创建大块共享匿名区,且未 munmap 或未设 close-on-exec 导致子进程继承后泄漏。

检查透明大页(THP)与内存碎片

THP 的 fallback 分配或拆分失败时,可能产生大量孤立的 anon huge page 后备页,RSS 不体现,但计入 AnonPages:

  • 查看 cat /sys/kernel/mm/transparent_hugepage/{defrag,enabled} 状态;
  • 检查 /proc/buddyinfo 是否存在大量不可用的高阶空闲页(如 order-9+ 缺失),导致 THP 折叠失败、退化为普通页堆积;
  • 运行 grep -i "thp\|huge" /proc/vmstat,关注 pgmajfaultthp_splitthp_collapse_alloc 等指标突增情况。

确认是否存在僵尸页或延迟回收

进程 exit 后,其 anon vma 若仍有 page fault 引用(如 core dump 中断、ptrace 暂停、或 cgroup memory.pressure 高导致延迟 LRU 移动),页可能滞留在 inactive anon LRU 链表中:

  • cat /proc/vmstat | grep -E "(pgpgin|pgpgout|pgmajfault|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpgin|pgpgout|pgpg

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

436

2024.03.01

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

390

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

390

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

702

2023.06.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号