读书人

OOM分析异常使用Servlet API导致内

发布时间: 2014-01-05 18:22:56 作者: rapoo

OOM分析——错误使用Servlet API导致内存溢出

请先前往《Spring内存溢出问题》查看问题,大体问题就是突然间内存飙升,且CPU使用率非常高。

?

问题分析

通过内存dump分析发现内存中某个key会有几百万个,而且观察这些key会发现有时候是org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER,有时候又变成org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVER,每次可能不一样。

?

这个key是springmvc放到request中的属性key,而且一个key不可能放到request多次啊,因为request attributes本身通过HashMap存储,且线程不安全;造成这个问题的能想到的就是线程绑定变量泄露/并发操作request。

?

但是问题通过观察应用,没有使用ThreadLocal模式,那么唯一可能就是并发操作request属性造成的。

?

另外,通过观察日志,发现如下异常:

    D     D 
可以看看翻译的servlet规范

读书人网 >软件架构设计

热点推荐