首页 > 其他 > 详细

解决一次内存泄露问题

时间:2020-12-15 10:35:24      阅读:23      评论:0      收藏:0      [点我收藏+]

之前公司内部项目出现了一个非常奇怪的内存泄露问题:环境上完全相同的几个项目,其中一个在跑了50个左右的并发接口时会直接报java heap space,本来以为是接口逻辑有问题。但是即使是查询单条数据这样的简单的接口也会报错,排除了代码逻辑的可能性。请教了下周围同事也没得出一个准确的结论,后来尝试将出问题的项目中的单个接口拿到其他环境中,发现不会出现问题。于是将问题锁定在了项目内。

在加了几个启动配置之后将内存泄露的hprof文件拿了下来

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/path/

用jdk自带jvisualvm打开文件进行排查:

技术分享图片

很明显byte数组占了90%+将程序跑挂了。

不过到了这虽然定位到了问题,但是进一步往下怎么走就不清楚了,只能先进入数组里看下具体是什么情况,于是点进去进入到实例数菜单里。根据大小排序完,没有发现什么有用的线索,但是看得出大部分的字段类型都和http请求相关。其他的类型都比较常见,但是有个http11inputBuffer比较特殊,这时就想着先百度一下有什么相关的报错看一看,结果一下就发现别人也出过完全一致的问题。

直接从这篇文章里找到了答案:

https://blog.csdn.net/aileitianshi/article/details/90147109

作者有比较深入的分析,总结来说问题出在这

server.max-http-header-size=10000000

这个配置项导致了请求头过大,正常只有4k大小,更改完配置后立竿见影,问题修复完毕了。

解决一次内存泄露问题

原文:https://www.cnblogs.com/mijwqs/p/14136944.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!