一次性能调优记录:压测报错out of memory内存溢出【杭州多测师_王sir】【杭州多测师】...

news2024/11/15 14:10:40

一次性能调优记录:压测报错out of memory内存溢出1、首先这是一段压测的报错日志截图

2、服务器的配置还不错,执行机全64核以上,运存256g以上,服务器80核,512g,所有机器线程数设置655360

3、刚开始以为是jmeter和Tomcat服务器的JVM里面的堆内存,新生代和老年代的参数设置太小了

4、然后进行的设置,设置之后发现还是有问题,发现启动jmeter的时候,配置还是显示默认值,在网上查了说改了配置,也不会显示,暂且就先相信一下

5、分析Out of Memory引起的原因:一般老年代空间不足时,JVM 会对老年代和年轻代进行完全的fullGC。如果 fullGC 后还是无法存放从 Survivor 复制过来的对象,就会出现 OOM(Out of Memory) ,但是这个堆空间设置的这么大,一天估计都不可能有一次老年代的垃圾回收

6、然后为了验证heap的设置是没有问题的打算用jmap -heap 进程号命令去看,但最后发现公司内网没办法用这个命令,所以暂时想不到更好的办法了

7、听网上说xms和xmx参数的单位要用kb或者MB,后来把-xms和-xmx改为10240MB,发现还是没用,继续怀疑是配置没生效

8、同时也用了dstat -tcmnd --disk-util命令去监控CPU和内存等等

9、用了jstat -gcutil 进程号 1 10 命令去看看GC的频率什么的

10、Tomcat的jvm参数在Catalina.sh里面进行设置
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:NewRatio=2 -XX:SurvivorRatio=8"
设置堆内存:-Xms1024m -Xmx1024m
设置新生代内存:-XX:NewSize=256m -XX:MaxNewSize=256m
设置新生代和老年代的比例:-XX:NewRatio=2
设置伊甸园和 Survivor 的比例:-XX:SurvivorRatio=8
设置栈内存:-Xss1m11、最后通过一系列操作完发现压测10几分钟后,还是会报内存溢出12、后面发现是因为忘了关察看结果树监听器,以前出现过业务返回数据过大导致内存溢出,这次避开了返回数据大小,忽略了返回数据个数,一般设计的sql语句查询行数超过1w,也会出现内存溢出,返回的个数太多也会出现内存溢出。我是设置的25万,忘了关查看结果树,所以导致报内存溢出的错误,后面关了就没有问题了。

关于oom内存溢出的其他知识补充1)问题原因:
用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误,原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。内存泄露:应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源。内存溢出:应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃。通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。
对JMeter而言也是如此,JMeter测试过程中,如果内存溢出的话,一般会出现上图中的提示:java.lang.OutOfMemoryError: Java heap space:意思就是堆内存溢出,不够用了2)解决方法
知道了报错出现的原因是因为堆内存大小不足引起的,自然而然就会想到内存溢出的解决方法:调整堆内存大小。
步骤(以Windows系统为例,Linux系统类似):
1、打开jmeter.bat文件,按关键字“HEAP”搜索,把原来的配置改为如下:
修改前:

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)

修改后:

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms512m -Xmx4000m
    set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m
)

set HEAP=-Xms512m -Xmx4000m:调整堆内存的大小
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m:调整堆内存中新生带的大小
注意:
这个值不是越大越好,要根据压测使用的机器而定,一般而言,堆内存的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整的时候其本身会占用很多内存),NEW分配的内存,不宜太大。
2、修改完成后保存,重启JMeter,即可生效。3)小结
1、这种修改堆大小的方法只适用一部分情况,并不是万能的,当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了。
2、命令行运行JMeter时,一定要禁用:查看结果树、聚合报告等监听器,因为真的真的真的很消耗内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

@ZBBIX集成LDAP功能实现用户统一登录认证

文章目录 1.zabbix认证方式2.LDAP模块查看3.windows AD配置4.zabbix配置LDAP5.开启LDAP账户登录6.AD账户登录测试7.AD账户批量添加zabbix8.数据库zabbix认证方式修改1.zabbix认证方式 zabbix6.0中,认证方式包含三种方式,如:LDAP、HTTP、SAML 实现ldap用户账户统一认证需要ad…

数据模型篇之维度设计

第10章 维度设计 1.维度设计基础 维度的基本概念 (1)维度是什么 维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实”,将环境描述为“维度”,维度是用于分析事实所需所需的多样环境。 (2&…

JS详解 | BOM | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘js… 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出并回答…

关于缓存与数据双写一致性问题(清晰易懂)

缓存与数据双写一致性问题 一般来说,执行更新操作时,我们会有两种选择: 先操作数据库,再操作缓存先操作缓存,再操作数据库 这两个操作要么同时成功,要么同时失败。所以,这会演变成一个分布式…

架构设计(五):有状态服务和无状态服务

架构设计(五):有状态服务和无状态服务 作者:Grey 原文地址: 博客园:架构设计(五):有状态服务和无状态服务 CSDN:架构设计(五)&…

批量查询搜狗收录,查询结果不准是什么原因

网站的收录情况是常用的技术手段,会影响到网站的流量和展现量,想要获得一个好的收录就必须重视原创内容,因为网站的收录直接影响力搜索引擎的关键词排名。 网站收录信息如何批量查询? 以搜狗收录为例: 1、打开SEO综合…

17 CPP面向对象编程

简单实用类: 1 类的成员函数可以直接访问该类其它的成员函数 2 类的成员函数可以重载。 3 类指针的用法与结构体指针用法相同 4 类的成员可以是任意数据类型(类中也可以有枚举) 5 可以为类的成员指定缺省值(C11标准&#xff…

Redis基础数据结构源码

1、SDS:动态字符串 src/sds.h:50 struct sdshdr {// 记录buf数组中已使用的字节数,即SDS字符串长度int len;// 记录buf数组中未使用的字节数int free;// 字节数组,用于保存字符串char buf[]; } 杜绝缓冲区溢出。减少修改字符串长度时所需的内…

概率统计·参数估计【区间估计】

置信区间 求解步骤 例 构造一个函数(主要是函数不用依赖未知量只有一个未知量,问μ的置信水平用这个函数,如果σ也未知,就要替换掉这个式子中的σ为S,并且变成服从 t 分布)取上下区间(用2个常数…

邪道方法-字典转字符串以传参字典给多GPU训练的mmseg

文章首发及后续更新:https://mwhls.top/4387.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 目录引言 解决方法 引言 我想把字典传参给多GPU训练&#…

CleanMyMac X4.12.2版本功能实用性测评

相信大多数MAC用户都较为了解,Mac虽然有着许多亮点的性能,但是让用户叫苦不迭的还其硬盘空间小的特色,至于很多人因为文件堆积以及软件缓存等,造成系统空间内存不够使用的情况。于是清理工具就成为了大多数MAC用户使用频率较高的实…

他不知道他病了

没时间读书,关注我每天更新一本好书关于作者关于本书核心内容一、如何理解缺乏病识感二、沟通四步策略1.倾听2.同理心3.赞同4.结为伙伴三、如果仍然不接受治疗,怎么办金句关于作者 泽维尔阿玛多是纽约市哥伦比亚大学心理学副教授,全美精神障…

javaSE - StringBuffer 和 StringBuilder(字符串拼接)

前言 StringBuffer 、 StringBuilder、 String 是三种数据类型 首先来回顾下String类的特点: 任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。通常来讲String的…

Oracle-expdp导出时间变长问题分析

前言: 近期处理了一起expdp导出时间变长的问题,在数据量没有较大增长的情况下,expdp导出时间发生倍数增长,后面分析发现是由于Bug 27634991导致在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过…

jsp+ssm计算机毕业设计窗户管理系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

[附源码]Nodejs计算机毕业设计基于社区人员管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【图像去噪】DCT图像去噪【含GUI Matlab源码 614期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

基于java+springmvc+mybatis+vue+mysql的戒烟网站

项目介绍 大量研究证据表明,戒烟可降低或消除吸烟导致的健康危害。任何人在任何年龄戒烟均可获益,且戒烟越早、持续时间越长,健康获益就越大。随着时代发展人们对健康也越来越重视,更多的人参与到了戒烟的行列中来,本…

[go]分布式系统之snowflake与锁

文章目录分布式id生成器分布式锁负载均衡go语言在网络服务模块有着得天独厚的优势; https://www.cnblogs.com/thepoy/p/14573822.html中详细介绍了涉及到的分布式相关技术。分布式id生成器 Snowflake(雪花算法),由Twitter提出并开…

六问 Kafka 为啥那么牛

1 Kafka 简介 1.1 Kafka 概述 Kafka 是一个分布式的基于发布/订阅模式的消息队列,依靠其强悍的吞吐量,Kafka 主要应用于大数据实时处理领域。在数据采集、传输、存储的过程中发挥着举足轻重的作用。 Apache Kafka 由 Scala 写成,是由Apache软…