top命令的SWAP计算错误了吗?
来源:互联网 发布:求实软件多少钱 编辑:程序博客网 时间:2024/04/30 01:06
这是新公司有个同事提到的,我刚好是负责这一块的,于是给他解答如下。
问题:
写了一个简单的测试程序,申请2G内存但不使用,理论上不使用的内存不会占用系统的物理内存和swap。top显示这个进程使用了2G swap,但整个系统只使用了1G swap。感觉TOP显示的swap信息完全是忽悠。
top - 12:03:30 up 109 days, 4:14, 16 users, load average: 1.00, 1.02, 1.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 9.2%us, 3.4%sy, 0.0%ni, 87.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 12462160k total, 7966312k used, 4495848k free, 465772k buffers
Swap: 4192956k total, 1257252k used, 2935704k free, 5561148k cached
PID USER PR VIRT RES SHR S %CPU %MEM TIME+ SWAP DATA COMMAND
22051 zhouzm 15 2050m 388 320 S 0.0 0.0 0:00.00 2.0g 2.0g a.out
解答:
汇总区域显示的Swap: 1257252k used是正确的,不过任务区域的SWAP 2.0g其实也不算是错的,我觉得是表达的意义不一样。top源代码里面,不像其它参数,SWAP不是直接读取/proc/pid/stat文件数据的,是这样计算的:SWAP = VIRT - RES,依赖于VIRT和RES。其中,VIRT(虚拟内存)是分配和释放内存时会变化的,而RES(即RAM)是使用的时候随着页面交换变化的。在刚分配大量内存但还没有使用的时候,VIRT明显变大但RES没有明显变化,导致SWAP变得出奇的大。
以下是我分配和使用2G大的数组,使用top捕捉到的变化过程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
before malloc 2G memory
4415 liangry 16 0 2404 248 192 S 0.0 0.0 0:00.00 2156 test_top_swap
after malloc 2G memory
4415 liangry 16 0 2050m 292 228 S 0.0 0.0 0:00.00 2.0g test_top_swap
start using the array
4415 liangry 25 0 2050m 733m 260 R 99.9 73.3 0:03.57 1.3g test_top_swap
end of assignment
4415 liangry 18 0 2050m 893m 84 R 24.3 89.3 0:11.19 1.1g test_top_swap
测试代码:
- top命令的SWAP计算错误了吗?
- top命令的SWAP计算错误了吗?
- top && swap
- top命令的使用
- RedHat的top命令
- top命令的学习
- top命令的补充
- top命令的使用
- linux的top命令
- Android的top命令
- 实用的top命令
- top命令的用法
- Android的top命令
- Linux的top命令
- 日了Dog的swap
- 用python计算top命令中某个进程的CPU,Memory使用情况
- margin-top的错误用法
- linux的TOP命令小结
- request 常用方法含义
- org.apache.catalina.ant.DeployTask Not Found
- ubuntu查看网卡驱动命令
- 命令行光标跳转快捷键
- 由一道Python题所想到的
- top命令的SWAP计算错误了吗?
- VMWare虚拟机与主机的共享设置
- dbank 很强大的网站。
- Apache配置文件中的deny和allow的使用
- blazeds介绍
- 链表的基本操作
- 64位存在32位里
- 简谈嵌入式系统的发展与应用
- windows 平台如何实现snmp agent?