smap推荐:新手选哪种
smap推荐给新手时,我不会只推荐一个命令。不同场景该用 smaps、smaps_rollup、pmap、smem 或监控面板,选错工具会多看很多噪声。下面按排障阶段逐项对比,给出最省力的入门路线。
快速扫一眼:推荐top和ps
刚接到告警,别急着打开 smaps。先用 top、htop 或 ps 看谁占内存最高。推荐命令:ps -eo pid,comm,rss --sort=-rss | head。它不精细,但能在十秒内把目标进程圈出来。
这一档工具的缺点也明显:只给总量,不解释来源。适合发现问题,不适合下结论。新手最容易在这里犯错,把 RSS 高直接等同于泄漏。
看总账:推荐smaps_rollup
如果系统有 /proc/PID/smaps_rollup,新手优先用它。输出短,字段集中,能看到 Rss、Pss、Private_Dirty、Shared_Clean、Anonymous、Swap。相比完整 smaps,它更不容易把人淹没。
推荐场景是值班判断和初步分类:PSS 是否真的高,Private_Dirty 是否异常,Anonymous 是否占大头。读完这一页,再决定要不要进入明细。
查明细:推荐完整smaps
需要定位具体映射时,再打开 /proc/PID/smaps。它能告诉你哪段是 [heap],哪段是 [stack],哪段来自某个 so 文件,哪段是匿名映射。排查 mmap 泄漏、deleted 文件、线程栈膨胀时很有用。
新手使用完整 smaps 的诀窍是搜索,不是通读。先搜 [heap]、[stack]、deleted、Anonymous,再看每段的 Rss、Pss、Private_Dirty。这样十分钟内就能抓到主线。
要汇总报表:推荐smem
如果你想按进程汇总 PSS,smem 比手写脚本友好。它可以列 USS、PSS、RSS,尤其适合多进程服务,比如 php-fpm、nginx worker、浏览器子进程。很多发行版可以直接安装 smem 包。
缺点是生产机器未必允许临时装包,输出也依赖系统权限。我的建议是本地和测试环境用 smem 建立口径,线上仍以 /proc 原始数据和既有监控为主。
长期观察:推荐监控加快照
长期监控不推荐完整 smaps 高频采样。更稳的组合是 cgroup 内存、进程 RSS、必要时 PSS rollup,再加异常触发的 smaps 快照。这样既能看趋势,又能保留现场证据。
新手路线很简单:ps 找进程,smaps_rollup 看总账,完整 smaps 查明细,smem 做横向比较,监控系统看趋势。按这个顺序来,基本不会迷路。
推荐阅读
常见问题
smap推荐新手从哪里学?
从 smaps_rollup 开始。先学会看 PSS、Private_Dirty、Anonymous,再去读完整 smaps 明细,学习曲线更平。
smap和smem推荐哪个?
查单个进程细节用 smaps;比较多个进程的 PSS、USS、RSS 用 smem。两者不是替代关系。
没有smaps_rollup怎么办?
可以直接读 /proc/PID/smaps,或用 pmap -x PID 先粗看。老内核没有 rollup 很常见,不影响使用完整 smaps。