记录一次线上内存溢出,server.tomcat.max-http-header-size导致

僤鯓⒐⒋嵵緔 提交于 2020-12-24 18:36:55

不是谷歌找不到,是搜索的方式不对

文件服务挂了,有点不可思议,线上内存设置的堆大小为16G,应该不会出现这种情况的,查看日志,发现在10:37到10:45文件挂掉这期间,发现一直再报org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space 本能觉得是内存泄漏了,不过没办法,线上并没有打印GC日志。涉及文件上传下载的一共就5个接口,开始查看代码压测,并没有复现。 晚上突然想起来线上另外两台服务器并没有挂掉,也应该存在同样的问题,随即去拿两台服务的内存快照,命令如下 jmap -dump:format=b,file=/root/heap.hprof 14714 有点大,两台的快照将近20G,用MAT进行分析,分析结果如下图:

根据报告发现byte[]和Http11OutputBuffer,看Http11OutputBuffer的名字感觉里面就是byte[],跟踪一下Http11OutputBuffer

发现是headerBuffer的问题应该是响应头缓冲区的问题,看下内容,是响应头

在网上查了下应该是配置的问题,去配置文件里找发现有一个配置有点相似,大小刚好和这个差不多

就应该是这个了,去网上查一下发现这个设置可以为0,果断修改压测 发现堆的年轻代不再频繁回收了,占用的内存也由原来的7个G降到了800m 收拾收拾下班回家

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!