内存溢出的解决方法

内存溢出的解决方法,第1张

内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。

内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;代码中存在死循环或循环产生过多重复的对象实体;使用的第三方软件中的BUG;启动参数内存值设定的过小;

检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

检查代码中是否有死循环或递归调用。

内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 当内存严重不足时,内核有两种选择: 1.直接panic 2.杀掉部分进程,释放一些内核。

在Linux环境,使用jmeter压测会遇到很多问题,比如:配置不对,权限不足这些都是很好解决。 但是遇到这几个问题: 1.内存泄漏   2.端口不够 遇到两个问题网上解决办法都很杂 ,没有一个清晰明了的解决办法,所以针对这两个问题,写出解决办法: 例如: 屏蔽“聚合报告”“查看结果数”,等插件脚本尽量最小变量 ,多个线程组下CSV文件设置,如果 只在当前线程组 使用变量,尽量不使用“全部现场”。 bin/下的jmeter文件(非jmeter.sh)编辑:(Windows环境编辑jmeter.bat) JVM_ARGS="-Xms4g -Xmx4g" 还有另一个方法:启动加参数设置:JVM_ARGS="-Xms2048m -Xmx2048m" jmeter -t test.jmx (上面调整内存格式可以1g 2g,也可以1024m 2048m,这样写都可以)Response code: Non HTTP response code: java.net.BindException Response message: Non HTTP response message: Address already in use: connect Linux本来的默认的端口欧范围:1024-65535,64511个,所以当压测接口调用超过65535个就会出现端口不够的问题。 查Linux支持多少端口, cat /proc/sys/net/ipv4/ip_local_port_range 然后找运维修改,或者: 修改文件  /etc/sysctl.conf 键入如下语句: net.ipv4.ip_local_port_range = 1024 65535压测过程还有其他问题,比如宽带限制,负载均衡,关闭缓存等,多百度即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7574908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存