关于进程内存使用的一点学习和实践

发表于:2011-10-12 10:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:superqa(CSDNblog)    来源:51Testing软件测试网采编

分享:

  前面在分析栈的时候我们提到了系统对栈的大小有上限,比如我的系统默认是8MB。那么有个问题就是,那么堆呢?

  嗯,这个部分其实就涉及到操作系统的内存管理的策略和方法,是个很大的问题,推荐看一下《深入理解计算机系统》相关的章节或者关于现代的操作系统的书籍。这里我们简单做了一下实验。

  我的实验机器的内存是1GB,一个Linux的虚拟机。

  当我们设置 m = n = 204800000的时候,相当于要申请800MB的内存。

  我们产品status的时候发现VmData > VmRSS, 这在前面m=n的情况下从来没有出现过。

  VmSize:   802784 kB
  VmLck:         0 kB
  VmHWM:    684384 kB
  VmRSS:    676808 kB
  VmData:   800064 kB

  所以一定是有些事情发生变化了。于是我们看了一下系统的内存,以及SWAP的使用情况。

  Mem:    900096k total,   893180k used,     6916k free,     1012k buffers

  Swap:  2096472k total,   147320k used,  1949152k free,    33012k cached

  发现系统的物理内存已经快用了,还留了一些给系统,然后开始使用SWAP了,大家知道这里的SWAP其实是磁盘文件。

  在这种情况下,我们也许可以更容易理解驻留内存的意义,以及为什么内存不够会导致性能的明显下降。

  如果进一步把m=n加到300M,也是申请1.2GB的内存(已经大于所有物理内存的数目),可能会更明显。

  VmSize:  1202784 kB
  VmLck:         0 kB
  VmHWM:    814064 kB
  VmRSS:    793588 kB
  VmData:  1200064 kB

  Mem:    900096k total,   894128k used,     5968k free,     1104k buffers

  Swap:  2096472k total,   541812k used,  1554660k free,    13616k cached

  通过这几个小的例子,会发现就是内存使用这样一个指标其实背后都会有很多值得去了解和探讨的细节,其实这里谈到的也只是冰山一角。只有了解并理解了这些重要的细节,我们在测试中去评估我们的产品的时候才会更加的准备,更容易发现和定位问题。另外不要忘记实际中的产品比这两个豆腐块程序要复杂得多。

44/4<1234
2023测试行业从业人员调查问卷已开启,千元大奖正在等你~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号