ps命令查vsz字段最直接,vsz表示进程申请的全部虚拟地址空间大小(单位KB),包含代码段、数据段、堆栈、共享库及mmap区域等未分配物理页的部分。

ps 命令查 vsz 字段最直接
想快速知道某个进程用了多少虚拟内存,ps 是最快的方法。它输出的 vsz(virtual memory size)字段就是该进程申请的全部虚拟地址空间大小,单位是 KB。
-
ps -eo pid,comm,vsz,rss,%mem --sort=-vsz | head -10:列出前 10 个虚拟内存占用最大的进程,vsz列即所求 - 查指定进程名:
ps -C nginx -o pid,comm,vsz,rss(替换nginx为你要查的进程名) - 查指定 PID:
ps -p 1234 -o pid,comm,vsz,rss(1234替换为真实 PID) -
vsz包含代码段、数据段、堆、栈、映射的共享库、mmap 区域等——哪怕这些区域还没真正分配物理页,也会计入
top 中看 VIRT 列对应的就是虚拟内存
top 默认显示的 VIRT 列,数值和 ps 的 vsz 是同一概念,只是单位不同(top 自动转为 MB/GB 并四舍五入,ps 默认 KB)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 启动
top后按Shift+P(大写 P)可按 CPU 排序,按Shift+M按内存(即%MEM)排序,但注意:%MEM算的是RSS占比,不是VIRT - 要确保看到
VIRT列:如果被截断或没显示,按f进入字段管理,用方向键选中VIRT,按空格启用 -
VIRT = RSS + SWAP是近似关系,实际还包含未分配的 mmap 区域,所以VIRT可能远大于RSS + Swap
/proc//stat 和 /proc//status 里有更底层字段
内核在 /proc/<pid>/stat</pid> 第 23 字段(size)和 /proc/<pid>/status</pid> 中的 VmSize 行,都记录了该进程的虚拟内存总量,单位 KB,和 vsz 一致。
- 查
VmSize:grep VmSize /proc/1234/status(输出形如VmSize: 123456 kB) - 查
stat第 23 字段:awk '{print $23}' /proc/1234/stat(需确认字段序号是否因内核版本微调) - 这两个值是内核实时维护的,比
ps或top更“原始”,但日常排查没必要绕路用它们 - 注意:
/proc/<pid>/statm</pid>里的第一个数字是size(即虚拟内存页数),需乘以getconf PAGE_SIZE才得字节数
别把 vsz 当成实际内存压力指标
虚拟内存大小本身不反映物理内存压力,很多程序(尤其 Java、Python 解释器、数据库)会预分配大量虚拟地址空间,但实际只用其中一小部分。
- 真正体现内存压力的是
rss(Resident Set Size)或RES,它代表当前驻留在 RAM 中的物理页数 - 如果一个进程
vsz是 4GB,rss只有 200MB,说明它几乎没真用那么多内存,只是划了地盘 -
vsz异常巨大(比如 >10GB)且持续增长,才值得怀疑是否存在 mmap 泄漏、大数组未释放、或 fork 后 copy-on-write 异常 - 结合
pmap -x <pid></pid>可看各内存段分布,确认哪些区域占了大头(如[anon]、libxxx.so、heap)
rss、swap、MemAvailable 之间的落差是否合理。

















