• 0
  • 0
分享

  Jmeter内存溢出解决方法

  现在越来越多的小伙伴在压力测试过程中选择使用Jmeter,原因是这个工具开源且小巧,而且还支持二次开发。

  但是事情都有两面性,利弊共存啊,比到商业软件Loadrunner,Jmeter在高并发,特别是大型项目的高并发,甚至是脚本运行时间过长时,压测机会出现严重卡顿甚至报异常——内存溢出,此时整个压测机几乎陷于瘫痪状态。

  这让很多小伙伴十分的头大,那该怎样改善这个局面呢,今天我就给大伙支几招!

1-1.png

  要想治病得知道病根,首先我们得了解下我们常说的内存溢出和内存泄漏到底是什么意思,它产生的原因是什么。

  内存泄露是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

  内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

  内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。

  一个盘子用尽各种方法只能装5个果子,你装了6个,结果掉到地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。

  通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。

  在利用jmeter测试过程中,如果内存溢出的话,一般会出现这个提示:

  java.lang.OutOfMemoryError: Java heap space:意思就是堆内存溢出,不够用了。

  说到堆栈内存,顺带简单介绍下堆栈的相关知识:

1-2.png

1-3.png

  内存溢出解决方法:调整堆内存大小

  步骤:

  1、内存溢出后是无法停止线程的,很多小伙伴急的抓耳挠腮,此时你只需要打开任务管理器,查看CPU排序最高的进程,点击结束进程即可;

  2、打开jmeter安装文件(可以用notepad++或者editplus打开),bin目录下的jmeter.bat文件:

1-4.png

  3、找到set HEAP开头的内容,根据具体需要修改堆(heap)值大小,以及NEW分配的内存值大小:

1-5.png

  这里默认值为:

  set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m

  将其修改为:

  set HEAP=-Xms512m -Xmx8192m                  (调整堆内存的大小)
  set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m  (调整堆内存中新生带的大小)

  注意:JDK32位的电脑Xmx不能超过1500m,最大1378m.否则在启动Jmeter时会报错哦~

  如何查看本机JDK的位数?

  CMD下执行 java -version

1-6.png

  一般而言,这个值不是越大越好,要根据压测使用的机器而定,堆的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整时候其本身会占用很多内存),NEW分配的内存不宜太大,够用就行了!

  4、修改完成后,关闭文件,重启jmeter既可以:

  PS:当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了,这种修改堆大小的方法只适用一部分情况,并不是万能的!

  还有就是如果是对于大型项目的高并发,我们尽量使用Jmeter的非GUI界面更为稳妥,这样整个使用会更加的丝滑,可能有些小伙伴不太能适应非GUI的命令行操作,但是万事开头难,等你用习惯了就好,而且这也显得你更加的专业哦!(在命令行运行JMeter时,一定要禁用“查看结果树”、“聚合报告”等监听器,因为真的很消耗内存。)


作者:有房车的直男    

来源:http://www.51testing.com/html/80/n-7799480.html

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   有消息称,拼多多总部将从中国迁至爱尔兰。据财联社报道,对此,拼多多相关负责人表示,该消息严重失实,纯属误读。“拼多多出生在上海,成长在中国,拼多多总部始终在中国上海,不会改变。”  据介绍,拼多多电商全球化业务 temu 出于在欧洲开展业务的需要,同时基于合规需求,选择爱尔兰都柏林为海外业务法律注册地。  拼多多日前向美国 SEC 递交 20-F 文件,文件显示,截至 2023 年 2 月 28 日,拼多多创始人黄峥持股为 26.5%,腾讯持股为 14.7%,拼多多合伙人集体持股为 7%。拼多多管理层一共持股为 1.2%。  查询相关数据获悉,拼多多 2020 年、2021 年、2022 ...
            0 0 1365
            分享
          • Python3.7+RIDE+Robot Framework环境搭建过程中,安装完robotframework-httplibrary后,加载HttpLibrary.HTTP报错Importing test library "HttpLibrary.HTTP" failed经过网上查询分析,发现HttpLibrary是基于python2.0开发的,高版本的python中可能会存在一些兼容性问题,所以我们就围绕兼容问题进行处理。Ride在应用过程中,遇到的兼容问题还是蛮多的,只能多多记录,以便后用。 一、检查HttpLibra...
            0 0 2647
            分享
          •   新浪科技讯据报道,谷歌(105.22,-3.58,-3.29%)母公司Alphabet今日要求法庭驳回多家广告商最新提交的修改后的集体诉讼。  2021年,多家广告商对谷歌提起集体诉讼,指控谷歌滥用其在数字广告上的主导地位。后来,加州圣荷地方法院法官贝斯·拉布森·弗里曼(BethLabsonFreeman)驳回了该诉讼。  但同时,弗里曼也保留了原告再次提起诉讼的机会。弗里曼称,原告需要厘清他们认为谷歌独占了哪个市场;还需要进一步解释,为什么说谷歌拒绝支持竞争对手的广告系统是反竞争行为,因反垄断法并未规定垄断方协助竞争对手生存。  对于广告商提交的修改后的集体诉讼,Alphabet称,提起...
            0 0 959
            分享
          • 今天我们来说说在 windows 系统上如果有多版本的 python 并存时,如何优雅的进行灵活切换。虽然 Python3 已经出来很久了,虽然 Python2 即将成为历史了,但是因为历史原因,依然有很多公司的老项目继续在使用着 Python2 版本(切换成本太高),所以大多数开发者机器上 Python2 和 Python3 都是并存的,本文主要说明这种情况下如何便捷的在 Python2 和 Python3 之间进行切换。先说明下,本次我们不介绍 virtualenv,也不介绍 pipenv,因为这两个都是为了大型的 Python 工程做准备的,之后会单独文字进行说明。本次是不借助外部工具,...
            1 1 2045
            分享
          •   科技媒体 Android Headline 昨日(8 月 1 日)发布博文,分享了 Pixel 9 Pro Fold 折叠手机的宣传视频。  谷歌重点介绍了 Pixel 9 Pro Fold 折叠手机的 8.0 英寸内屏,并展示了使用 Gemini AI 规划出游方案,并排打开 Google Messages 和 Gemini 等等。  可 180 度展开  谷歌初代 Pixel Fold 手机被人诟病的一点是,无法实现 180 度完全展开,谷歌在视频中表示,谷歌 Pixel 9 Pro Fold 手机解决了这个问题,可以完全 180 度展开。  新的铰链  消息源认为谷歌公司和国内欧加集...
            0 0 600
            分享
      • 51testing软件测试圈微信