讲师中心 微信公众号
AI工具推荐 视频效率加速

sar -r 显示 %memused 高但 free -h available 很多的 anon 页面问题

千丽姑娘_1617

千丽姑娘_1617

发布时间:2026-01-19 12:57:15

|

421人浏览过

|

来源于php中文网

原创

%memused高但available大是因sar统计不区分可回收内存,而available包含可换出匿名页等弹性空间;AnonPages高未必有压力,需结合active/inactive比例、swap活动、OOM及应用表现综合判断。

sar -r 显示 %memused 高但 free -h available 很多的 anon 页面问题

这是 Linux 内存管理中一个常见但容易误解的现象:sar -r 显示 %memused 很高(比如 95%+),而 free -h 却显示 available 值很大(比如还有 8GB 可用),同时 /proc/meminfo 中的 AnonPages 数值偏高。这并不一定表示内存真的“吃紧”,而是反映了内核对“已使用”和“可用”内存的不同统计逻辑。

为什么 %memused 高但 available 很多?

sar -r 的 %memused 计算方式简单粗暴:它用 Total - Free - Buffers - Cached(即传统意义上的“已用内存”)除以总内存,**不考虑可回收的 page cache、slab、anon pages 是否实际被锁定或活跃**。而 free -h 的 available 是内核 3.14+ 引入的更智能估算值,它综合了:

  • 真正空闲页(MemFree)
  • 可快速回收的 page cache(非 dirty、未被锁定)
  • 部分可回收的 slab(如 dentries/inodes)
  • 可换出的匿名页(如果 swap 启用且策略允许)

所以即使 AnonPages 较大(例如 Java 应用分配了大量堆),只要这些页当前不活跃、未被访问,内核仍认为它们是“潜在可用”的——available 就包含了这部分弹性空间。

AnonPages 高但系统没压力?看 active/inactive 比例

高 AnonPages 本身不是问题,关键看这些匿名页是否“热”。可通过以下命令判断:

cat /proc/vmstat | grep -E "pgpgin|pgpgout|pgmajfault|pgpgin|pgpgout" —— 若 pgmajfault(缺页中断)持续升高,说明进程频繁触发换入,可能真缺内存;

java-api-doc-generator
java-api-doc-generator

分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。

下载

grep -i "active\|inactive" /proc/meminfo —— 关注 Inactive(anon) 和 Active(anon)。若 Inactive(anon) 远大于 Active(anon),说明大部分匿名页近期未被访问,内核随时可将其换出或回收(尤其开启 vm.swappiness > 0 时)。

如何确认是否存在真实内存压力?

别只盯数字,看行为:

  • OOM killer 是否触发? dmesg -T | grep -i "killed process" —— 出现即严重内存争用
  • swap 使用是否增长? swapon --show 或 cat /proc/swaps,结合 si/so 字段(sar -B)看每秒换入换出量
  • 内存分配延迟是否上升? cat /proc/zoneinfo | grep -A5 "node.*Normal" | grep "spill" 或观察 /proc/vmstat 中 pgalloc 与 pgfail 差值
  • 应用响应是否变慢? 如 JVM GC 时间突增、数据库查询延迟升高,再结合 pidstat -r -p <pid></pid> 看单进程 RSS 和 %MEM

什么情况下需要干预?

仅 %memused 高 + AnonPages 高,但 available > 10%、无 swap 活动、无 OOM、应用正常 —— 无需操作。这是内核高效利用内存的表现。

需关注的情形:

  • 有 swap 且 si(swap-in)持续 > 100 KB/s,同时 available 持续低于 5% → 考虑加内存或优化应用内存使用
  • AnonPages 接近 CommitLimit(cat /proc/meminfo | grep Commit),且 Committed_AS 不断上涨 → 存在内存过度承诺风险,检查是否有内存泄漏进程(ps aux --sort=-%mem | head -10)
  • Java 等应用 rss 远高于 heap(jstat -gc <pid></pid> 对比),且 Anonymous 在 pmap -x <pid></pid> 中占比高 → 可能存在 native memory 泄漏(如 DirectByteBuffer、JNI)

热门AI工具

更多
码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1158

2023.09.04

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

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

6547

2023.07.18

堆和栈区别
堆和栈区别

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

2728

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

3025

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

4121

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

3371

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

1067

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2947

2023.10.09

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn