![关于内存管理我应该了解些什么?](https://linux22.com/image/1269109/%E5%85%B3%E4%BA%8E%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E6%88%91%E5%BA%94%E8%AF%A5%E4%BA%86%E8%A7%A3%E4%BA%9B%E4%BB%80%E4%B9%88%EF%BC%9F.png)
首先:
- 我不使用 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 占用了我的内存。