1、查看总内存,指令free -m
返回例子:
# free -m
total used free shared buff/cache available
Mem: 480 27 442 0 10 443
Swap: 0 0 0
其中available表示真正可用物理空间,如果只是malloc,并未使用,则不占用实际物理内存
2、查看具体进程占用内存
cat /proc/PID/status | grep -E "VmSize|VmRSS|VmData|VmStk|VmExe"
返回例子:
VmSize: 638436 kB
VmRSS: 4136 kB
VmData: 497268 kB
VmStk: 132 kB
VmExe: 920 kB
VmSize (638436 kB ≈ 623 MB)
全称:Virtual Memory Size
含义:进程的总虚拟内存大小
包括:代码段、数据段、堆、栈、共享库、内存映射文件等
关键点:这是虚拟地址空间,不全是实际占用的物理内存
在例子中:当前进程 申请了约 623MB 的虚拟地址空间
VmRSS (4136 kB ≈ 4 MB)
全称:Resident Set Size
含义:进程实际占用的物理内存大小
包括:正在使用的代码、数据、堆栈等
关键点:这是真正的内存占用,
free -m中的used包含这个在例子中:当前进程 实际只用了 4MB 物理内存!
VmData (497268 kB ≈ 485 MB)
全称:Data segment size
含义:堆(heap)的大小(
malloc分配的地方)包括:动态分配的内存、全局变量、静态变量
关键点:大部分是虚拟分配,不一定占用物理内存
在例子中:当前进程 的堆分配了 485MB 虚拟空间
VmStk (132 kB ≈ 0.13 MB)
全称:Stack size
含义:栈(stack)的大小
包括:局部变量、函数调用信息
关键点:通常较小,每个线程有自己的栈
在例子中:主线程栈大小约 0.13MB
VmExe (920 kB ≈ 0.9 MB)
全称:Executable code size
含义:可执行代码的大小
包括:程序本身的机器指令
关键点:通常只读,可以在进程间共享
在例子中:当前进程 可执行文件约 0.9MB