关于内存管理我应该了解些什么?

关于内存管理我应该了解些什么?

首先:

  • 我不使用 stackadmin 或类似程序,所以请不要投票支持迁移到那里,
  • 我正在阅读男士上衣以及论文“每个程序员都应该知道的关于内存的知识...”
  • 我确实需要一个简单的通俗解释;)

具有以下顶级转储:

top - 11:21:19 up 37 days, 21:16,  4 users,  load average: 0.41, 0.75, 1.09
Tasks: 313 total,   5 running, 308 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us,  0.6%sy,  0.9%ni, 96.2%id,  0.1%wa,  0.0%hi,  1.9%si,  0.0%st
Mem:  132103848k total, 131916948k used,   186900k free,    54000k buffers
Swap: 73400944k total, 73070884k used,   330060k free, 13931192k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3305 tudb      25  10  144m  52m  940 R  6.0  0.0   1306:09 app 
 3011 tudb      15   0 71528  19m  604 S  3.3  0.0 171:57.83 app 
 3373 tudb      25  10  209m  93m  940 S  3.0  0.1   1074:53 app 
 3338 tudb      25  10  144m  47m  940 R  2.7  0.0 780:48.48 app
 4227 tudb      25  10  208m  99m  904 S  1.3  0.1 198:56.01 app
 8506 tudb      25  10 80.7g  49g  932 S  2.0 39.6 458:31.22 app 

我想知道是什么:

  • RES(我的解释是物理内存消耗?看到49GB)
  • VIRT(内存映射磁盘到缓存?参见 80GB)
  • SHR(共享页面?)
  • 交换:(这是缓存标签 - 用于将内存映射磁盘放入交换缓存吗?)
  • RES 的总和是否应给出 MEM: X used?或者可能是 VIRT 的总和?

答案1

直接来自top(1)

VIRT——虚拟映像(kb)任务使用的虚拟内存总量。它包括所有代码、数据和共享库以及已换出的页面。(注意:您可以定义STATSIZE=1 环境变量,VIRT 将根据/proc/#/state VmSize 字段计算得出。)

VIRT = SWAP + RES.

SWAP——交换大小(kb)任务的总虚拟内存映像的换出部分。

RES——驻留大小(kb)任务已使用的非交换物理内存。

RES = CODE + DATA.

CODE——代码大小(kb)用于可执行代码的物理内存量,也称为“文本驻留集”大小或 TRS。

数据——数据+堆栈大小(kb)用于除可执行代码以外的物理内存量,也称为“数据驻留集”大小或 DRS。

SHR——共享内存大小(kb)任务使用的共享内存量。它只是反映可能与其他进程共享的内存。

另请阅读Linux 占用了我的内存

相关内容