尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
zram 状态指标详解:mm_stat 的 9 列、io_stat 的 3 列与一套完整排障路径
zram 状态指标详解mm_stat 的 9 列、io_stat 的 3 列与一套完整排障路径【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux线上某台 32G 内存的服务器可用内存掉到 4% 以下swap 开始工作后应用 P99 延迟从 80ms 爬到 600ms。这台机器的 swap 挂在 zram 上理论上不走磁盘为什么还会这么卡登录机器后cat /sys/block/zram0/mm_stat一看压缩后的数据量只比原始数据量小 8%mem_used_max一路逼近 disksizeio_stat里的failed_writes还在持续增长。接下来这段内容就照着内核里 zram 真正记录、导出这些数字的代码把每个字段拆开讲再给出对应异常下的排查顺序。一个 4KB 页进入 zram 之后发生了什么zram 本质是一个 RAM 块设备页被写进来的时候不占原来的 4KB 槽位而是压缩后塞进一个按对象大小分档的内存池zsmalloc读回来时再解压。它并不是无脑压缩页内容会先走三条分支压缩器以后端形式挂载每种算法一个文件见 drivers/block/zram/ 下的backend_lz4.c、backend_zstd.c等池分配逻辑在 mm/zsmalloc.c。写路径zram_bvec_write、读路径zram_bvec_read都在 drivers/block/zram/zram_drv.c 里排障时对照这两个函数看计数从哪来最直观。mm_stat 的 9 列与 io_stat 的 3 列逐列拆开用户空间能读到的核心状态就在/sys/block/zramX/下两个文件。mm_stat的 9 列顺序固定由mm_stat_show()按序 emit字段定义可对照 Documentation/ABI/testing/sysfs-block-zram列序字段含义合理取值 / 经验阈值1orig_data_size当前存入的原始数据量未压缩口径≤ disksize2compr_data_size压缩后实际占用的数据量越小说明压缩越有效3mem_used_total内存池真实占用含元数据这是 zram 真正吃的 RAM4mem_limit人为设定的占用上限0不限按需设定5mem_used_max历史峰值占用逼近 disksize 要警惕6same_pages全零页数量占比高压缩器没白干7pages_compacted碎片整理移动过的对象数持续上涨池在碎片化8huge_pages当前多页槽位数量反映大对象占比9huge_pages_since累计产生的多页槽位只增不减看增量io_stat只报块层不统计的部分3 列依次为 failed_reads、failed_writes、notify_free——后两个是内存池吃紧时池向系统发的释放通知它们非零就说明 zram 已经在和分配失败搏斗。读写次数则走通用块层接口/sys/block/zramX/stat的第 1、5 列即读、写次数。注意一个常被误读的点压缩率不是某个现成 sysfs 字段要自己算# 第1列orig第2列compr第6/8列按每页4KB折算输出真实压缩比 awk {r$1/($2$6*4096$8*4096); printf orig%.1fM compr%.1fM ratio%.2f\n, $1/1048576, $2/1048576, r} /sys/block/zram0/mm_stat这个比值长期低于 1.1基本等于 zram 白开——页还在占 RAM却多付了压缩 CPU。观测从一条 awk 到 Prometheus 面板手工巡检一行就够# 一眼看全压缩比、池占用、失败计数 paste (awk {print $1/($2$6*4096$8*4096)} /sys/block/zram0/mm_stat) (cat /sys/block/zram0/io_stat)脚本化采集把同一套 awk 塞进 cron5 分钟一次落盘顺带做阈值判断#!/bin/bash # 采集 zram 关键指标压缩比低于 1.1 输出告警到 stderr LOG/var/log/zram_metrics.log awk -v t$(date %F_%T) { r $1 / ($2 $6 * 4096 $8 * 4096) print t, $1, $2, $5, r, $7 $LOG if (r 1.1) print zram0 ratio r 1.1 /dev/stderr } /sys/block/zram0/mm_stat接入 Prometheus最省事的路线是 node_exporter 的 textfile collector把指标渲染成 exposition 格式Grafana 里放三张图压缩比趋势低于 1.1 画参考线、mem_used_total 与 disksize 对比80% 告警、failed_writes 增量非零即红色面板。采集片段# 供 node_exporter textfile_collector 抓取 { awk {printf zram_compression_ratio %.4f\n, $1/($2$6*4096$8*4096)} /sys/block/zram0/mm_stat awk {printf zram_orig_bytes %.0f\nzram_mem_used_bytes %.0f\n, $1, $3} /sys/block/zram0/mm_stat awk {printf zram_failed_writes_total %.0f\n, $2} /sys/block/zram0/io_stat } /var/lib/node_exporter/textfile_collector/zram.prom三类高频异常比值太低、池子打满、换入偏慢压缩比趴在 1.1 以下。先确认数据本身的可压缩性如果 workload 主要是已压缩/加密内容对象缓存、加密块低比值是必然此时调算法收益有限正确动作是缩disksize服务器建议物理内存的 25%~50%嵌入式可放到 100%~200%甚至弃用 zram。若数据其实可压缩则换更激进的算法并用 5.19 引入的二次压缩把存量页再压一遍# 主算法换成 zstd再让空闲页用次级算法重压缩降低存量平均大小 echo zstd /sys/block/zram0/comp_algorithm echo idle_pages /sys/block/zram0/recompressmem_used_max 逼近 disksize、failed_writes 上涨。这是池子装不下或碎片化后的典型形态对应io_stat里 notify_free 也会跟着涨。处置分三步先看pages_compacted是否持续上涨碎片信号是则触发一次整理再检查有没有设mem_limit兜底最后如果开了后备盘让不可压缩页走 writeback 腾池# 触发 zsmalloc 碎片整理写回空闲页到后备盘重置峰值计数便于观察新趋势 echo 1 /sys/block/zram0/compact echo 1 /sys/block/zram0/writeback echo 0 /sys/block/zram0/mem_used_max换入延迟高但 zram 本身健康。这时重点怀疑页其实不在 RAM 里看后备盘计数文件bd_statbd_count、bd_reads、bd_writes如果 bd_reads 明显增长说明大量页被 writeback 到了盘上读回走的是磁盘路径zram 的快就没了。对策是收紧 writeback 触发调小writeback_limit、必要时writeback_limit_enable置 0或把后备盘换成更快的介质。一个判断收尾zram 的全部状态可以浓缩成四个视角压缩器有没有用压缩比、池子占了多少mem_used_total / mem_used_max、碎片化程度pages_compacted、失败与回写io_stat 与 bd_stat。日常盯住这四组90% 的异常都能对号入座。想继续深入读 Documentation/admin-guide/blockdev/zram.rst 里的完整配置流程再从 drivers/block/zram/zram_drv.c 的zram_bvec_write顺着计数变量的每个atomic64_inc走一遍比任何指标手册都清楚。留给读者一个问题如果换成以不可压缩数据为主的 workloadzram 的账还划得来吗【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

20+个能源开放数据集完整指南:按场景挑选电力数据源

20+个能源开放数据集完整指南:按场景挑选电力数据源

20个能源开放数据集完整指南:按场景挑选电力数据源 【免费下载链接】awesome-public-datasets A topic-centric list of HQ open datasets. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets 写家庭用电消耗的论文,或做…

📅 2026/10/7 2:28:10
如何驯服 Orca 的 Zustand 状态管理“选择器扇出“风暴:性能预算基准完整指南

如何驯服 Orca 的 Zustand 状态管理“选择器扇出“风暴:性能预算基准完整指南

如何驯服 Orca 的 Zustand 状态管理"选择器扇出"风暴:性能预算基准完整指南 【免费下载链接】orca Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and …

📅 2026/11/6 13:22:49
Netdata Windows 监控完整指南:从安装到全面掌握只需 5 分钟

Netdata Windows 监控完整指南:从安装到全面掌握只需 5 分钟

Netdata Windows 监控完整指南:从安装到全面掌握只需 5 分钟 【免费下载链接】netdata The fastest path to AI-powered full stack observability, even for lean teams. 项目地址: https://gitcode.com/GitHub_Trending/ne/netdata Netdata Windows 监控是…

📅 2026/10/7 6:25:35
MORE NEWS

更多资讯

📰

营口电工证哪里办 2026河南最新政策下如何避开报名陷阱

营口电工证哪里办 2026河南最新政策下如何避开报名陷阱 你是不是也这样,拿着手机刷了整整一个下午,就是找不到一个靠谱的报名渠道?怕被中介坑,怕交了钱拿不到证,怕流程复杂搞不清楚?别急,这篇文章就是为你量身打造的,尤其是 营口电工证哪里办…

📰

苏州电工证延期机构怎么选?全国通用证书不怕被坑的干货全在这

苏州电工证延期机构怎么选?全国通用证书不怕被坑的干货全在这 你是不是也遇到过这种情况,电工证快到期了,却不知道该去哪家机构办理延期,一不小心就掉进中介陷阱里?特别是像苏州这种大城市, 全国通用…

📰

郑州报考避坑指南:学历不高怕报不上名?国网系统电工证这样考更靠谱

郑州报考避坑指南:学历不高怕报不上名?国网系统电工证这样考更靠谱 学历不高怕报不上名?这事儿我懂,我自己就是从农村出来的,刚开始干电工那会儿,连高中都没毕业,但照样考下了国网系统电工证,现在在洛阳涧西区干房建工程,一个月轻松拿8000多。今…

📰

北京焊工证电工证实操考试怕挂科?官方报名入口教你避坑

北京焊工证电工证实操考试怕挂科?官方报名入口教你避坑 实操考试心里没底怕挂科?在北京考焊工证和电工证的人,几乎都遇到过这个问题。特别是对新手来说,操作不熟练、流程不熟悉,一紧张就容易出错。别担心,本文从漯河公路工程从业者的角度出发,结合…

📰

工地太忙根本没时间复习考试?官方回应:高压电工证单位发放渠道与备考全攻略

工地太忙根本没时间复习考试?官方回应:高压电工证单位发放渠道与备考全攻略 工地太忙根本没时间复习考试?官方回应:高压电工证单位发放渠道与备考全攻略。作为三门峡劳务班组负责人,我深知一线工人在高压电工证考试前的焦虑。很多人觉得时间不够、内容太…

📰

广州电工证考试难不难 内部消息告诉你怎么避坑

广州电工证考试难不难 内部消息告诉你怎么避坑 不知道去哪报名怕被中介坑?广州电工证考试难不难?这是很多建筑工人心头的疑问。其实,广州电工证考试本身难度适中,但真正让人头疼的,是报名流程复杂、材料繁多,还有那些打着“包过”旗号的中介,让人防不…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬