行业动态

软件测试之Java内存溢出问题

软件测试之Java内存溢出问题

  最近测试一个智能呼叫系统,就是AI代替人工客服批量给客户打电话作推广活动,在测试的过程中,应用服务器和数据库服务器资源使用都挺正常的,但是长久不重启应用,过个2-3天,执行个几次同时呼叫600个电话拨打任务后,就可能存在:org.springframework.web.util.NestedServletException:Handlerprocessingfailed;nestedexceptionisjava.lang.OutOfMemoryError:Javaheapspace

  上线时间太紧了,被SB总监催着不管质量只管进度的上线。周日被开发喊来看性能问题。周一就要交差了。

  这里我想说的是,这么久以来,我们的开发框架都非常稳定了,一般就是抓抓弱智的慢语句,看看线程在干啥有没有乱搞导致应用负载飙升。关于内存这方面,可以说没有那么大的需求那个高的要求,一直都没啥进步,都是吃老本,包括使用的工具,也是几年都没变的JavaVisualVM,变的只有是从jdk1.6升级到了1.8。

软件测试之Java内存溢出问题

  关于内存溢出

  网上的资料全是坑,都没有一篇写到点上的,我就发现了个问题,要查一个难点,你得至少结合30篇博客的知识点加上自己的悟性才能搞定一个问题。

  首先,你windows本机得安装好java,我这里用的是java8。java的安装这里不累赘了。不过这里解释几个名词。以免看不懂。

  java:开发语言,一种名称;

  jdk:java语言的软件开发工具包,全称是:JavaDevelopmentKit;

  jre:JRE是JavaRuntimeEnvironment缩写,指Java运行环境;

  jvm:JVM是JavaVirtualMachine(Java虚拟机)的缩写;

  VisualVM:是JAVA自带的,一款免费的,集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力,对Java应用程序做性能分析和调优;

  javagc:java垃圾回收,说到这个话就多了。涉及到对jvm堆中无用对象进行回收;

  扩展知识:JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象。这些对象的建立方式就是那些new一类的操作,当对象无用后,是GC来负责这个无用的对象(地球人都知道)。

  JVM堆

  (1)新域:存储所有新成生的对象;

  (2)旧域:新域中的对象,经过了一定次数的GC循环后,被移入旧域;

  (3)永久域:存储类和方法对象,从配置的角度看,这个域是独立的,不包括在JVM堆内。默认为4M。

  GC的工作目的很明确:在堆中,找到已经无用的对象,并把这些对象占用的空间收回使其可以重新利用.大多数垃圾回收的算法思路都是一致的:把所有对象组成一个集合,或可以理解为树状结构,从树根开始找,只要可以找到的都是活动对象,如果找不到,这个对象就是凋零的昨日黄花,应该被回收了。

  我们现在存在的问题就是:GC不了垃圾,导致时间久了,内存会溢出,这个即使增大jvm也无济于事,只不过能延缓。

  这种问题如果不从代码层面优化,还有个欺骗领导的办法:

  1、应用每天重启一次,释放垃圾;

  2、jvm配置原来的2倍内存;

  以上是关于软件测试的知识,由多测师亲自撰写! https://www.duoceshi.com/

新闻资讯

联系我们

联系人:何女士

手机:13825291265

电话:0755-21072941

邮箱:hr@duoceshi.com

地址: 广东省深圳市龙华区龙华街道清湖和平路62号优鼎企创园D栋201室,202室

用手机扫描二维码关闭
二维码