必须通过/proc/[pid]/smaps直接读取内核原始内存映射数据,以获取rss、pss、swap等十余项细分指标;先用pgrep或ps/top确定pid,再执行cat /proc/[pid]/smaps | grep -e "^(pss|rss|swap)"提取关键字段,结合free -h观察available值判断系统内存压力背景。

如果您需要在麒麟操作系统中深入分析某个具体进程的内存构成,比如判断是否存在内存泄漏、区分独占与共享内存占比、或验证PSS(Proportional Set Size)是否异常偏高,则必须绕过top或ps的概览式输出,直接读取内核暴露的原始内存映射数据。
通过 /proc/[PID]/smaps 查看进程内存细分指标
这是最权威、最细粒度的方法,直接解析内核为每个进程维护的内存快照文件,可获取RSS、PSS、Swap、AnonHugePages等十余项指标。
第一步:确定目标进程PID。例如查看nginx主进程,执行 pgrep -f "nginx: master process";若已知进程名但不确定PID,可用 ps aux | grep nginx 辅助识别,注意排除grep自身行。
第二步:用cat读取对应smaps文件。将上一步得到的PID代入命令:cat /proc/12345/smaps(把12345替换成真实PID)。该文件长达数百行,包含大量内存区域细节。
第三步:聚焦关键字段。执行 cat /proc/12345/smaps | grep -E "^(Pss|RSS|Swap|AnonHugePages|MMUPageSize):",只提取核心指标行。其中PSS是重点——它按共享内存比例分摊后的真实内存消耗值,比RSS更反映该进程对系统内存的实际压力。
注意:【/proc/[PID]/smaps仅对当前存活进程有效,进程退出后对应目录立即消失】。若目标进程刚崩溃,此路径将返回“No such file or directory”错误。
结合 free 命令确认系统级内存压力背景
单独看一个进程的PSS没有意义,必须对照整机可用内存判断其占比是否异常。否则可能误判正常服务为“内存大户”。
执行 free -h,重点关注 available 列数值。如果该值低于总内存的10%,说明系统整体已处于内存紧张状态,此时单个进程PSS即使不高,也可能因争抢导致性能抖动。
若available充足但某进程PSS持续增长,才需进一步排查其是否存在内存泄漏。
用 ps 和 top 快速定位并验证PID
方法一:用ps一次性筛选出目标进程及其RSS和%MEM
执行 ps -eo pid,rss,%mem,comm --sort=-rss | grep -i "nginx",输出含PID、物理内存占用KB(RSS)、内存占比%MEM及命令名。RSS值可与smaps中RSS字段交叉验证,确保PID准确无误。
方法二:用top交互式锁定进程
运行 top → 按 M 键按内存排序 → 找到目标进程 → 记下左侧PID → 按 q 退出。此法适合进程名不唯一、存在多个同名子进程时人工甄别。











