Linux查看系统内存带宽利用率的详细方法
在Linux环境中,没有现成的内存带宽利用率指标,必须通过perf读取内存控制器性能计数器,或使用IntelPCM工具链获取DDR实际读写速率。由于不同CPU的事件编码不同,且free vmstat无法反映带宽压力,同时多通道和NUMA架构会影响真实瓶颈。
在 Linux 环境下,并没有一个现成的“内存带宽利用率”指标可以直接查看。当你打开 /proc/meminfo、free、vmstat 时,看到的仅仅是内存用量和页面活动状况,而非 DRAM 实际读写速率。要想获取实时内存带宽数据,必须借助 perf 或 Intel 的 PCM 工具链才能实现。

perf stat 可测量 DDR 实际读写速率,但事件名称需根据 CPU 型号确认
在 Intel 平台上,最通用的方法是直接使用 perf 读取内存控制器(uncore)的性能计数器。关键不在于死记命令,而是先确认当前 CPU 支持哪些具体事件:
- 执行
perf list | grep -i memory查看可用事件,重点关注类似uncore_imc_00/event=0x04,umask=0x0f/(DDR 读)和uncore_imc_00/event=0x05,umask=0x0f/(DDR 写)的条目。 - 不同微架构的事件编码存在差异:Skylake 和 Ice Lake 的 event code 并不相同,直接套用会报
event is not supported错误。 - 单次采样示例:
sudo perf stat -e uncore_imc_00/event=0x04,umask=0x0f/,uncore_imc_00/event=0x05,umask=0x0f/ -I 1000 -a sleep 5,输出结果中两列数字分别表示采样周期内的读/写字节数,除以时间再换算为 MB/s(除以 1024²)。 - 默认仅监控 socket 0;多路服务器需添加
-a参数,并手动解析每个uncore_imc_*设备(例如uncore_imc_01)。
pcm-memory.x 输出可读的带宽摘要,但仅支持 Intel 且对版本有要求
Intel PCM 工具链中的 pcm-memory.x 是最接近“开箱即用”的解决方案,但它并非系统自带组件,也不兼容 AMD 平台:
- 必须从 GitHub opcm/pcm 下载源码自行编译,
apt install intel-cmt-cat并不包含完整的 PCM 工具链。 - 运行
sudo ./pcm-memory.x 1后,直接查看MEM READ和MEM WRITE列,单位是 GB/s;顶部还会显示理论峰值带宽(如Max Memory Bandwidth: 51.2 GB/s)。 - Sapphire Rapids 等新平台需要使用 PCM v5.13 以上版本,旧版本可能将带宽读成 0 或报错
Failed to detect memory controller。 - 该工具默认聚合所有内存通道,但不会区分 NUMA 节点——跨节点访问的实际延迟和隐性竞争情况,
pcm-memory.x完全不体现。
free/vmstat 的“内存使用率”与带宽毫无关联
很多人误以为 free -h 中 available 接近 0 就代表带宽已被打满,这是一种典型的认知混淆:
free中的used是内核统计的“已分配页”,并不包含硬件层面的突发访存压力。- 一个仅占用 2GB 物理内存的程序,如果进行密集随机访问(例如 hash join 配合大 buffer pool),照样能占满 DDR 带宽,但
free显示一切正常。 vmstat中的si/so反映的是 swap I/O,bi/bo反映的是块设备 I/O,两者都与内存控制器吞吐量无关。- 真正与内存带宽相关的硬件事件包括:DRAM read/write cycles、memory controller queue depth——这些指标只能通过
perf或 PCM 工具来捕获。
内存带宽并非单一数值:在多通道架构下,每个 channel 独立计数;在 NUMA 架构中,跨节点访问会引入额外延迟和隐性带宽争抢,而绝大多数工具默认只报告 socket 0 或聚合值,这容易掩盖真实的瓶颈点。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
CentOS 7手动释放内存缓存的详细方法
手动清理Linux内存缓存需先执行三次sync防丢数据。echo1清页缓存,echo2清目录与inode缓存,echo3全清但慎用。清理前依据available而非free判断内存压力,清理后关注available及swap使用率。
Mac菜单栏查看当前WiFi频率的实用方法
Mac无需第三方工具,按住Option键点击菜单栏Wi-Fi图标即可查看频率或信道;使用无线诊断工具的扫描信息可确认频段;系统报告中的PHYMode字段显示硬件级协商结果,三种方法覆盖从桌面快捷查看到底层验证。
CentOS 7系统默认语言修改方法
CentOS7修改默认语言需先安装zh_CN UTF-8语言包,再通过localectl或 etc locale conf设置LANG为zh_CN UTF-8。修改后验证locale输出,注意避免LC_*变量覆盖,图形界面与日志可能需额外处理。
Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录
LVM本身不记录或管理坏块,坏块屏蔽由文件系统(如e2fsck将坏块列表写入超级块)和硬盘固件(如S M A R T 重映射)处理。用户需绕过LVM层,必须直接检查物理设备(如 dev sdb2)的坏块列表及重映射计数等信息,才能确认其屏蔽记录情况。
银河麒麟系统Prometheus安装配置方法详解
在银河麒麟系统上部署Prometheus,需先确认CPU架构(ARM64或AMD64),下载对应安装包,创建标准目录并解压。接着配置自监控,创建非root用户,手动启动验证。最后注册为systemd服务,实现开机自启。注意配置文件路径及权限设置。
- 热门数据榜
相关攻略
2026-07-13 07:34
2026-07-13 07:33
2026-07-13 07:33
2026-07-13 07:33
2026-07-13 07:33
2026-07-13 07:33
2026-07-13 07:32
2026-07-13 07:32
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

