性能指标之资源指标-内存-内存是否泄漏
2017-03-21 09:11
260 查看
在稳定性测试(也叫持久测试或疲劳测试)中,需要观察内存是否有泄露。然而使用内存的进程千千万,整个服务器的内存增长似乎也不能判断某个进程的内存有泄露。因此在稳定性测试过程中往往需要全程关注指定进程的内存消耗,比如运行3天、7天。
查看内存使用情况的命令有ps、sar、svmon、vmstat等等,但本文并不从工具使用的角度来介绍,而是从性能测试中关注指标的角度来介绍。如果采用其他命令查看内存,需注意,相似的名字在不同命令当中的含义是不一样的,一定要搞清楚这个字段的真正含义。
例1:Virtual这个词,有时候在内存里面指Paging Space(换页空间),有时指进程空间里面占用的所有分页(包括物理内存和Paging Space中的分页)。
例2:Nmon中的PgIn/PgOut、topas中的PageIn/PageOut是指对文件系统的换页,而vmstat中的pi/po是对Paging Space的换页,而topas P中进程的PAGE SPACE是指进程的Data Segment。下面就来介绍这个Data Segment。
Data Segment
1、获取来源
ps gv 进程号:SIZE(单位为KB)
svmon –P 进程号:work process private +work shared library data (根据具体情况,可能单位为4KB)
topas P中进程的PAGE SPACE(根据具体情况,可能单位为4KB)
2、指标说明
内存泄露指进程自己申请分配、使用了内存但没有在使用完毕后释放,大量的泄露会导致物理内存用满,降低系统效率。
如何判断一个进程有没有内存泄露?AIX中使用ps gv命令观察特定进程的SIZE指标,如果SIZE经过长时间测试后,不断增长,则可能有内存泄露的嫌疑,这里说的是嫌疑,而不是一定。如果是java程序由于涉及到JVM的内存管理,问题就更难判断的,我们先放下java程序不表,单说C的程序。
SIZE在ps命令当中的解释是The virtual size of the data section of the process (in 1KB units)。为什么看这个指标,则需要从进程空间开始说。
进程空间的内存可以分为三种类型:
1)数据段:Data Segment (Data + BSS + Heap)
2)栈:Stack
3)代码段:Code Segment
栈(Stack):包括返回地址、自动分配的变量,都是一会儿有一会儿没的,系统自动回收,不会造成内存泄露。
代码段:进程跑起来肯定要有代码,代码基本上可以说是固定大小的,不会造成内存泄露。当然如果代码太大,装不进内存,那就另当别论了。
剩下的数据段就是进程自己分配、使用的分页,数据段包括Data + BSS + Heap。
Data是已经初始化的全局和静态变量。
BSS是未初始化的全局和静态变量,比如static int i。
Heap(堆)是进程中malloc, realloc等函数申请的,需要free等函数释放。
1、举例
ps gv命令中SIZE就是该进程数据段的virtual size(1KB为单位),这些分页可能在物理内存中也可能在Paging Space中。
检查SIZE列在长期的测试过程中是否有明显的持续增长,如有,说明可能有内存泄露。
长期的抓取和后期的图形化处理,可以写脚本或代码来实现。
其他命令也可以看到这个值,例如“svmon –P 进程号”以看work process private的virtual大小+work shared library data的virtual大小。二者的单位是4K的分页。(169+85)*4=254*4=1016,与ps v得到的SIZE值相同。
也可以Topas,敲击P,看指定进程的PAGE SPACE,也是254,254*4=1016,与ps v得到的SIZE值相同。
有人会问,为什么不从nmon里面取值?nmon的TOP Sheet里面的进程也有SIZE等内存的指标,但nmon的TOP Sheet中只列出占CPU比较多的N个进程,如果被监控的进程占CPU很低,就不会出现在TOP Sheet中。或者一开始被监控进程占CPU较多,后来由于它占用的CPU减少而从TOP sheet中移除了,那么我们并不知道这个进程是销毁了还是CPU利用率太低了。
相关文章推荐
- 性能指标之资源指标-内存-是否有内存泄漏(2)
- 性能指标之资源指标-内存-物理内存是否够用
- 性能指标之资源指标-内存-内存泄漏为什么不易判断
- 性能指标之资源指标 如何判断物理内存是否够用
- 性能指标之资源指标-内存-上期答疑
- 性能指标之资源指标-内存-配置对性能的影响
- 性能指标之资源指标-内存-判断占用内存多的进程
- 性能指标之资源指标-内存-计算内存与非计算内存
- 性能指标之资源指标-内存-结合案例介绍JVM内存管理机制
- 硬件资源监控_磁盘性能指标计数器
- Google的桌面搜索引擎有不少内存和资源泄漏
- Android应用性能之检测内存泄漏
- Android性能测试工具:内存资源
- goto语句可释放资源避免内存泄漏
- Windows 性能监视器的基本指标(CPU,内存,硬盘参数)
- 重载operator new实现检测内存泄漏是否可行
- windows 内存泄露和资源泄漏调试
- Windows 性能监视器的基本指标(CPU,内存,硬盘参数)
- android性能测试之内存泄漏
- Intel UPNP lib的一个内存资源泄漏问题