EOS5 之 内存溢出问题的解决
不知道普元的EOS属于哪个分类,直接放在综合类里面了。
有个项目,使用EOS5.x开发的,部署在互联网上,每年都会周期性的接受大批量人访问。
今年只是做了一些不大的调整,结果往年没有出错的应用,今年过不了多久就会报内存溢出错误。
严重的时候,几分钟就要重启一下应用服务器,否则大家都没法访问。
刚开始的时候,认为改动的部分是引起错误的主因。查看EOS的日志,观察其可用内存大幅下降
的地方,有很多业务逻辑都在这个时候调用,并没有发现很有价值的内容。但是其中一个有大量的
文档生成并提供下载的地方,引起了我们的注意,认为可能是这些文档一直在内存当中,只有等用
户下载完之后才会释放。后来将这部分代码改成生成临时文件提供下载,问题依然没有得到解决。
于是还是决定冷静下来,使用 EOS5 提供的性能分析工具,将 userAccessMonitor.log 下载下来,
使用分析工具,查看最近一次刚内存溢出期间的状况,首先看一下内存变化情况:
在 17:23之前,一直很平稳,系统分配的内存一直是512M,可用内存也没有
明显变化。但是在17:24左右,突然开始有个占用内存陡升的过程,然后在 17:34,
终于由于内存溢出无法工作而被重启了。
从这个过程可以看出,应该是某一个请求,导致内存的持续增长,直至没有可用内存
可供分配,那么这个请求动作,一定是未完成的动作。因此,通过未执行完的请求,可以看出如下
这两个动作:
这两个请求发生时,可用内存还有480多M,属于正常范围。这两个请求发生之后,其他的未完成请求,都属于
由于强行中断应用服务器导致的,可以忽略。因此,重点就放在这两个请求上。
查看代码后发现,这两个请求,都会去查询数据库的某一张表。通常这个查询都是带查询条件和范围限制的,
但是在某个非常特定的情况下,会导致查询条件和范围都没有传递进去,因此程序会试图将整个数据库装载
进内存,从而导致内存溢出。
找到问题原因,再解决就非常容易,找到相应的代码,如果没有传入条件和范围就抛错,done.
EOS5 之 内存溢出问题的解决相关推荐
- 开发中内存溢出问题及解决
开发中内存溢出问题及解决 参考文章: (1)开发中内存溢出问题及解决 (2)https://www.cnblogs.com/yangyi1024/p/6417874.html 备忘一下.
- Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)
Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) 参考文章: (1)Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) (2)https://ww ...
- jmeter(二十二)内存溢出原因及解决方法
jmeter(二十二)内存溢出原因及解决方法 参考文章: (1)jmeter(二十二)内存溢出原因及解决方法 (2)https://www.cnblogs.com/imyalost/p/7901064 ...
- springboot上传大文件时内存溢出的可能解决办法
springboot上传大文件时内存溢出的可能解决办法 在springboot中上传大文件时要考虑内存的情况,一般我们会通过在执行服务时加入-Xms512m -Xmx512m等参数加大堆内存,但这是指 ...
- java内存溢出的情况解决方法
内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决. 第一步,就是修改JVM启动参数,直接增加内存.这一点看上去似乎很简单,但很容易被忽略.JVM默认可以使用的内存为64M,To ...
- jenkins内存溢出的一些解决过程
公司内网测试jenkins服务器,最近总是出现PermGen space(内存溢出)的问题,解决过程记录如下 1.重启jenkins查看日志: 3, 2017 10:54:54 udson.Exten ...
- C#程序出现内存溢出错误的解决办法
上周一个C#开发的站点出现了内存溢出错误:"引发类型为"System.OutOfMemoryException"的异常" 因为页面众多一时最初难以确定问题源,找 ...
- 瑞萨RL78系列单片机报内存溢出故障的解决过程。RA78K0R error E3206: Segment ‘@@CODEL‘ can‘t allocate to memory - ignored
最近开始使用瑞萨的R7F0C908芯片,ROM48K,对于目前的项目肯定是足够了,虽知道代码完成后,编译出现这个故障:RA78K0R error E3206: Segment '@@CODEL' ca ...
- Java内存溢出场景及解决办法
Java内存溢出即程序在申请内存时,没有足够的空间供其使用,出现out of memory.常见于四种情况:栈溢出(StackOverflowError).堆溢出(OutOfMemoryError:j ...
最新文章
- MongoDB给数据库创建用户
- 一个小时内学习SQLite数据库
- C语言判断一个数是否是回文数Palindrome算法(附完整源码)
- CSS之calc()使用
- Springboot中几个层的功能总结
- 2011年至2019年制造的 AMD 处理器均易受两种新型攻击
- TimeUnit类中的sleep() 和Thread.sleep()
- oracle 外部os授权,外部OS认证的过程
- matlab如何获得数组有多少数,请问MATLAB里有得到一个数组中相同数有多少个的函数么?...
- 裸看美剧必备英文词汇
- CF1428 G1,G2 . Lucky Numbers题解
- FrameExit:Conditional Early Exiting for Efficient Video Recognition
- 其实装修也是工程管理
- 详解Minimax算法与α-β剪枝
- 数据结构课程设计——通讯录管理系统
- 贴几行汉语编程的代码
- KEIL,MDK,STM32
- Redis源代码分析(十一年)--- memtest内存测试
- 计算机毕业设计Java进出货管理系统(源码+系统+mysql数据库+lw文档)
- Matlab的rand函数以及randi函数使用