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

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

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

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

  在测试,特别是性能测试或者系统的稳定性测试中,内存的使用情况是一个很重要的监控点,不管是从资源使用的角度还是从发现内存泄露问题的角度。

  如果笼统的来看,大概就是两个指标,系统的内存使用率和进程使用的内存。但是现实世界的事情往往没有那么简单,稍微细一点来看其实有很多的科目。本文不是一个全面的关于内存使用的探讨,甚至也不是一个详细的Linux下面进程内存使用情况的分析,尽管这里的实践是基于此的。

  这里想做的是稍微细节一点的来看Linux下一个进程的内存使用情况,包括栈和堆。

  首先我们从一个简单的C程序开始。且慢,先说一下我试验的环境。

  platform:  CentOS release 5.6 (Final)  Linux localhost.localdomain 2.6.18-238.19.1.el5xen #1 SMP Fri Jul 15 08:57:45 EDT 2011 i686 i686 i386 GNU/Linux

  gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)

  [root@localhost test]# cat simple_hello.c

#include <stdio.h>                                
                                                 
int main()                                        
{                                                 
 int i,m = 1024, n = 0, x;                      
 int a[m];                                       
                                                 
 printf("assign %d values to a[%d]...\n", n, m);
                                                 
 for (i = 0; i < n; i++)                         
 {                                               
   a[i] = 100;                                   
 }                                               
                                                 
 printf("value assigned.\n");                                                               
 scanf("%d", &x);  /* to hold program.. */       
 return 0;                                       
}

  真是一个很简单的程序,只比hello world复杂一点点。创建一个静态的数组,长度通过m来控制,然后选择性的给部分或者全部的元素赋值,通过n来控制。好吧,这个一个简单的程序能看出什么呢?那我们一起来看看。

  在Linux下面,查看一个进程的内存使用我们可以下面的命令来实现,只需把其中的[pid]换成进程实际的pid。

  # cat /proc/[pid]/status

  为了方便,我们把查找pid和看内存整合成一条命令,后面这将是我们唯一的测试工具。

  cat /proc/`ps -ef|grep hello | grep -v grep | awk '{print $2}'`/status | grep -E 'VmSize|VmRSS|VmData|VmStk|VmExe|VmLib'

  在这里我们关注VmSize|VmRSS|VmData|VmStk|VmExe|VmLib 这个6个指标,下面有一些简单的解释。

  VmSize(KB):虚拟内存大小。整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和。

  VmRSS(KB):虚拟内存驻留集合大小。这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。

  VmData(KB):程序数据段的大小(所占虚拟内存的大小),堆使用的虚拟内存。

  VmStk(KB):任务在用户态的栈的大小,栈使用的虚拟内存

  VmExe(KB):程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库

  VmLib(KB):被映像到任务的虚拟内存空间的库的大小

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号