• 14
  • 14
分享
  • WebSphere 内存泄漏测试小结——软件测试圈
  • 曼倩诙谐 2021-09-01 09:50:17 字数 2800 阅读 2107 收藏 14

  内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放。短期一般没有明显异常现象,但持续泄漏一定时间后,应用层面会出现交易TPS下降、响应耗时增长、交易成功率下降、CPU升高等异常现象,甚至出现内存溢出,系统宕机等现象,其危害相当严重。

  本文对WAS内存泄漏测试过程中的经验进行小结,通过对GC输出分析内存泄漏的最常用操作和场景分析思路的汇总,为测试人员高效高质量的完成性能测试工作提供技术指导。

  一、WebSphere 应用服务器的 GC 日志获取

  (1)首次获取日志文件,需登陆 WebSphere 公共管理控制台,开启“详细垃圾回收”,设置初始堆大小和最大堆大小。后期测试前可事先确认,一般情况下是不需要更改配置的。

  (2)测试执行前可有选择获取dump 文件和 Javacore 文件,以备后期分析。获取 dump 文件步骤如下:登陆 WebSphere 公共管理控制台,选中 server,点击“堆 转 储”和“java核心”按钮 。

  (3)执行性能疲劳测试。因内存泄漏不易暴露,因此建议:一是内存泄漏测试的执行时间不能太短,建议放在疲劳测试中进行;二是铺底数据量建议与预期的最大生产数据量保持一致;三是测试执行数据量尽可能模拟生产最大数据运行场景,例如报表下载功能,考虑查询全量数据的下载场景。

  (4)获取日志。在执行测试结束后,测试人员获取SystemOut.log应用日志和native_stderr.log 详细内存回收日志文件。

  二、查看GC 曲线图

  目前工作中使用的 GC 日志分析工具是PMAT(IBM Pattern Modeling and Analysis Tool for Java Garbage Collector),使用PMAT打开 native_stderr.log 文件,点击 Analysis 菜单,选择 Graph View All,或直接右键选择 Graph View All,根据需要选择查看的曲线。

1-1.png

  曲线可选项含义如下图所示:

1-2.png

  其中:具体指标数据可通过 GC View Part 表格数据的形式获得。

  三、应用程序内存泄漏分析

  性能测试人员可以通过以下几个文件和相关指标对内存泄漏展开辅助分析:

  1、GC 日志分析

  (1)GC 频率

  GC 频率可通过选择 Interval(since)曲线图直观查看,也可以通过日志指标数据计算获得(GC 频率= Number of Garbage Collections / (Last Garbage Collection - First Garbage Collection))。

1-3.png

  如果Full GC 频率较高,达到数秒一次,则需要检查系统现在运行情况是否合理,是否存在内存泄漏情况。

  项目组曾经在性能测试时遇到过随着疲劳测试的进行,GC频率越来越快的现象,如下图所示:

1-4.png

  通过dump文件分析,发现日志类变量定义未使用final修饰导致产生大对象,通过优化,将日志类log变量定义为static final后对比测试,GC频率恢复均匀正常。

1-5.png

  (2)检查 GC 过程中长存区的变化

  常存区的已用内存如持续不断增大,每次垃圾回收后可用的内存依然持续降低表明系统可能存在内存泄漏。

  (3)检查 GC 空间配置和使用情况

  由于 Java 程序所能使用的堆空间上限完全取决于 JVM 启动时的参数配置,当堆空间上限参数设置过低,即使操作系统物理内存空闲较多,应用程序也无法使用。因此在性能结果分析时,可关注 GC 类型、GC 申请空间大小和新生代空间大小等配置信息。

  同时需要关注GC空间使用情况以判断JVM 堆的使用是否合理,新生代的空间大小配置和长存区的空间大小配置是否满足当前业务场景要求。是否会存在虽然进行了GC,但堆空间的使用仍不能满足申请空间的要求,系统出现频繁GC或内存溢出现象。

  (4)检查是否存在大对象

  依据大对象使用区域和堆内存的使用情况,结合heapdump判断应用程序中是否存在大对象。测试案例设计时需要考虑应用程序对大数据量事物处理稳定性的测试,例如接口报文考虑考虑大报文的传输测试,下载考虑大数据量报表的全表下载。

  (5)关注 GC 过程中是否清理了过多引用对象

  当发现 GC 过程中清理了过多引用对象,需要检查被测系统的代码编写是否符合规范。

  (6)关注 GC 整个过程消耗的时间和垃圾回收中断时间

  过长的 GC 会直接影响到系统的性能,测试人员在分析时可关注以下几个指标或曲线:overhead、Total Garbage Collection pause、Duration。

  2、Heapdump文件分析

  打开 dump 文件,如果服务器存在内存泄漏的可能,则会出现下图红框所示的“Reference Tree”界面。Reference Tree 中列出了当前堆中占比最大的对象信息。在其中选择占比最大一项,一层层点开,最后找到类信息,结合程序代码可定位问题所在。

1-6.png

  也可以通过菜单 Analysis>Tree View 进行内存泄漏分析,堆内存占用比例越大说明内存消耗越多,然后针对对象所处的程序块进行连带分析,确定产生内存泄漏的原因。

  3、Javacore 文件分析

  关注线程的运行情况,可以查看不同状态的线程执行堆栈,提交项目组分析堆栈找到其中属于系统应用的代码。如下图所示:

1-7.png

  在分析过程中需要重点关注的线程有:

  ·死锁,Deadlock:死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。

  ·执行中,Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递 SQL 到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。

  ·等待资源,Waiting on condition:如果堆栈信息明确是应用代码,则证明该线程正在等待资源,一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。又或者,正在等待其他线程的执行等。

  ·阻塞,Blocked:是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。这种情况在 was 的日志中,一般可以看到 CPU 饥渴,或者某线程已执行了 XX 秒的信息。

  经过一段时间的项目联机性能测试实践,测试人员对内存泄漏查找定位、GC 曲线图加深了理解,对 WAS 内存泄漏分析有了一定的测试经验。在后续的工作中,我们将继续不断回顾总结,持续提升测试人员测试技能,增强信息安全意识,多筹并举保障持续提升系统稳定性。



作者:李琳   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 首发:https://mp.weixin.qq.com/s/3Wn_zdwTHArHPdlbjNOEOQ同类文章推荐:https://mp.weixin.qq.com/s/nh4c9El9FjJtX4vy8m2ELA 世纪性难题:剪不断、理还乱的开发测试关系二舅火了,《回村三天,二舅治好了我的精神内耗》在朋友圈疯狂转发,看很多测试同事发圈感慨二舅治好了自己的精神内耗,让自己不再纠结那些得不到的东西。想必你也经历过一刷激动、二刷感动、三刷四刷平平无奇的感觉,到现在可能你已经想不起来视频讲了什么。曾经短暂平和的内心是不是又泛起焦虑不安的浪花?二舅治不好你的精神内耗,测试人的精神内耗是二舅...
            1 1 1296
            分享
          • 读者提问:工作中大家用的比较多的接口测试工具有哪些呢 ?阿常回答:1、Postman2、Jmeter3、命令行工具 curl4、浏览器开发者模式 5、抓包工具 Fiddler、Charles 等等阿常碎碎念:阿常在平时工作中 1、2、4 使用得更多一些。其中,1 做接口测试更多一些;2 做接口压力测试更多一些;4 做 BUG 分析定位更多一些。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信阿常,一起探讨交流。
            0 0 1230
            分享
          • 读者提问:简易好用的在线 PS 工具有推荐的吗 ?阿常回答:有,稿定设计 / Canva可画 / 图司机。官网地址:https://www.gaoding.com/(稿定设计)https://www.canva.cn/(Canva可画)https://www.tusij.com/(图司机)阿常碎碎念:我们在平时工作生活中会遇到处理图片的需求,但不想额外在电脑上安装一个 PS 软件,期望可以直接浏览器访问、在线操作。以上三款在线 PS 工具均能满足日常图片处理的需求,但比较下来,阿常觉得稿定设计的用户体验更佳,更加推荐大家使用。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后...
            0 0 658
            分享
          • 接口测试和功能测试虽然都属于软件测试的范畴,但两者的测试目的、测试内容和测试重点都有所不同。那今天我将接口测试和功能测试配合实例为大家介绍这两种测试的区别,以 Apifox 这个最近风头很大的接口测试软件进行讲解。一、测试目的不同接口测试的目的是测试应用程序的接口是否能够按照规范要求与其他系统或组件进行交互,以及在不同负载条件下接口的稳定性、性能和安全性。功能测试的目的则是为了确保应用程序的功能符合规格说明书或需求文档中的规定。Apifox 是一个在线接口测试平台(但其实也有桌面端啦),它的主要目的是为了帮助测试人员快速创建和执行接口测试用例,验证接口的正确性和稳定性。通过使用 Apifox,...
            0 0 926
            分享
          •   在今日上午的 2024 科大讯飞全球 1024 开发者节上,科大讯飞宣布语音识别首次实现全国地级市方言全覆盖,支持包括 288 个地市的 202 种方言。  在发布会上,科大讯飞首次发布星火多语言大模型,支持英语、俄语、日语、阿语、韩语、法语、西语、葡语、德语共 9 种外语。  科大讯飞还展示了星火多语言大模型的多个使用场景,包括车载语音交互的任务推荐、意图理解、实时检索等,附图如下:  星火多语言大模型现已对外开放,面向开发者和行业伙伴接入使用。作者:汪淼原文链接:IT之家(ithome.com)
            0 0 144
            分享
      • 51testing软件测试圈微信