linux - VmSize = 物理内存 + swap?

标签 linux linux-kernel

我有一个关于 VmSize 的小问题,在文档中它应该是应用程序对内存的使用。

但是在我的系统上:

VmSize = 物理内存 + swap VmHWM 看起来更像是应用程序实际使用的内容。

[root@sun ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         12012       9223       2788          0        613       1175
-/+ buffers/cache:       7434       4577
Swap:         3967          0       3967


[root@sun ~]# cat /proc/8268/status
Name:   mysqld
State:  S (sleeping)
Tgid:   8268
Pid:    8268
PPid:   1
TracerPid:      0
Uid:    89      89      89      89
Gid:    89      89      89      89
FDSize: 512
Groups: 89 
VmPeak: 15878128 kB
VmSize: 15878128 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:   7036312 kB
VmRSS:   7036312 kB
VmData: 15839272 kB
VmStk:       136 kB
VmExe:     10744 kB
VmLib:      6356 kB
VmPTE:     16208 kB
VmSwap:        0 kB
Threads:        265
SigQ:   0/96048
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000087007
SigIgn: 0000000000001000
SigCgt: 00000001800066e9
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Seccomp:        0
Cpus_allowed:   fff
Cpus_allowed_list:      0-11
Mems_allowed:   00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        2567
nonvoluntary_ctxt_switches:     77

知道为什么吗? 我特别尝试获取此应用程序的内存使用情况,但此结果没有任何意义。

谢谢。

最佳答案

VMsize 是进程使用的“地址空间”:可用地址 的数量。这些地址不必附加任何物理内存。 (附物理内存为RSS图)

您可以通过使用 p = malloc(4 * 1024 * 1024); 分配一 block 内存来验证这一点,并且*p做任何事情:VmSize 将增加 1K 页,但 RSS 将(大约)相同。 (你的程序会有更多的可寻址内存,但它没有寻址,所以内存不需要attached)

关于linux - VmSize = 物理内存 + swap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174645/

相关文章:

linux - 在 bash 脚本中搜索函数以检测已安装的软件包

c - 什么是 Linux 本地定时器中断?

Linux DMA API 问题

linux - "the kernel address space"是什么?

c - 在 Linux 中测量进程统计信息

linux-kernel - 启用 CONFIG_DEBUG_INFO_BTF 时内核编译错误

c - 从 stderr 而不是 stdin 读取

c - 如何知道 'errno' 是什么意思?

linux - 我在哪里可以找到 Yocto "sub"- 未在 OpenEmbedded 层索引中列出的包,如 "kbd-keymaps"?

用于在不同时间运行的作业的 Linux Crontab 表达式