`
fancyboy2050
  • 浏览: 240681 次
  • 性别: Icon_minigender_1
  • 来自: 皇城根儿下
社区版块
存档分类
最新评论

spring mvc 内存泄露

阅读更多
有一个项目使用了spring mvc,以前因为各种原因一两个月内都会重启一次,但是最近两个月因为项目没有新的业务发布,所以工程就一直没有被重启,突然有一天应用挂起了,无法访问,cpu也被吃满,查看full gc记录发现项目的full gc越来越频繁,觉得可能是某个地方出现了内存泄露,于是用jmap把jvm的内存dump出来,发现一个叫viewCache的对象占用了好几个G的内存,是spring框架中的一个对象,于是查看源码。

spring的试图解析器抽象类中,解析返回对象时,会以controller的返回值为key把解析视图对象放到HashMap结构的缓存中。
org.springframework.web.servlet.view.AbstractCachingViewResolver
public View resolveViewName(String viewName, Locale locale) throws Exception {
		if (!isCache()) {
			logger.warn("View caching is SWITCHED OFF -- DEVELOPMENT SETTING ONLY: This can severely impair performance");
			return createView(viewName, locale);
		}
		else {
			Object cacheKey = getCacheKey(viewName, locale);
			synchronized (this.viewCache) {
				View view = (View) this.viewCache.get(cacheKey);
				if (view == null) {
					// Ask the subclass to create the View object.
					view = createView(viewName, locale);
					this.viewCache.put(cacheKey, view);
					if (logger.isDebugEnabled()) {
						logger.debug("Cached view [" + cacheKey + "]");
					}
				}
				return view;
			}
		}
	}

我们的controller中有一些地方会出现:
    @RequestMapping(value = "/home")
    public String home(HttpServletRequest request) {
       if (xxxx) {
// rds为随机数
           return "redirect:/user/login?" + rds;
       }
       return "home";
    }
这样当系统在不断的运行过程中,viewCache中不重复的key会越来越多,因为没有设置一个reload的阀值,最终导致内存泄露。
分享到:
评论

相关推荐

    spring mvc重定向导致内存溢出解决方案

    ### Spring MVC 重定向导致内存溢出解决方案 在Spring MVC框架中进行页面重定向操作时,可能会遇到因重定向导致的内存溢出问题。本文将详细介绍该问题的原因、原理以及解决方法。 #### 一、问题背景及原因分析 在...

    Spring MVC实现文件的上传和下载

    在本文中,我们将深入探讨如何利用Spring MVC实现在Web应用中进行文件的上传与下载。 首先,我们需要理解Spring MVC中的两个核心组件:Model、View和Controller。Controller接收用户请求,处理业务逻辑,然后将结果...

    spring mvc实现文件上传并携带其他参数的示例

    3. `IntrospectorCleanupListener`防止内存泄漏,清理Spring自动发现的JavaBeans属性信息。 然后,`DispatcherServlet`是Spring MVC的核心,它负责处理所有请求,并根据`spring-mvc.xml`配置文件进行调度。`load-on...

    图书管理系统( Spring+Spring MVC+JdbcTemplate).zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    spring mvc中直接注入的HttpServletRequst安全吗

    当请求结束时,Spring会清理`ThreadLocal`中的`RequestAttributes`,防止内存泄漏。 具体到Spring MVC的生命周期,`HttpServletRequest`的设置发生在`FrameworkServlet`的`service()`方法中,这个方法会被Servlet...

    基于Spring MVC+MyBatis+Shiro+Dubbo开发的分布式后台管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    spring-5.3.17-dist.zip

    2. **Spring MVC**:在Spring 5.3.17中,Spring MVC持续优化了Web应用的开发体验。它提供了模型-视图-控制器的架构模式,使得开发者可以更轻松地处理HTTP请求和响应,支持RESTful风格的接口,增强了对WebSocket的...

    download-using-streaming-response-body:一个示例,用于在Spring MVC中使用StreamingResponseBody分流处理大文件

    在Spring MVC框架中,处理大文件的下载是一个常见的需求,特别是在大数据或文件服务的应用场景下。传统的文件下载方式可能会导致内存溢出,因为整个文件会被一次性加载到内存中。为了解决这个问题,Spring MVC提供了...

    Spring Restful 分析

    6. **清理资源**:在请求处理完成后,`processRequest` 方法还会清除之前设置的一些线程局部变量,如 Locale 上下文和 Request 属性等,以避免内存泄漏。 7. **日志记录**:最后,如果启用了调试日志,那么会记录...

    Spring的web配置

    springmvc的资源配置:Spring 刷新Introspector防止内存泄露,Spring MVC配置;Character Encoding filter; <param-name>contextConfigLocation <param-value>classpath*:applicationContext-*.xml ...

    springmvc 文件上传下载

    在Spring MVC框架中,文件上传和下载是常见的功能需求,特别是在Web应用中处理用户的数据交互。Spring MVC提供了灵活且强大的支持来实现这些操作。本文将详细介绍如何使用Spring MVC 3的注解方式来实现文件上传与...

    SpringMVC(九)文件上传和下载

    1. 文件大小限制:Spring MVC允许设置最大上传文件大小,防止内存溢出。 2. 文件类型检查:确保用户上传的是安全的文件类型,避免恶意文件。 3. 临时存储:上传的文件通常先存储在临时目录,之后再移动到持久化存储...

    Spring Framework 4.3.16 下载 官方

    5. **XML处理漏洞**:Spring Framework可能使用了易受攻击的XML库,如存在XXE(XML External Entity)漏洞,攻击者可以通过恶意构造的XML文档来泄露系统信息或执行恶意操作。 除了安全修复,4.3.16版本可能还包含了...

    MVC无框架设计模式

    - 关闭资源:完成操作后,记得关闭Statement、Connection等资源,防止内存泄漏。 **5. 日志记录** 为了便于调试和追踪程序运行状态,项目中可能使用了如Log4j或java.util.logging等日志框架。这些框架可以帮助我们...

    shiro-redis-cluster

    《Spring MVC、Shiro与Redis集群的整合应用详解》 在现代Web开发中,安全管理和数据缓存是两个至关重要的环节。Apache Shiro是一个强大且易用的Java安全框架,负责处理认证、授权、会话管理和加密等任务。Redis则是...

    spring-framework-4.0.x

    - **性能调优**:合理设置缓存策略,优化数据访问,减少内存泄漏。 - **安全考虑**:使用Spring Security增强应用安全性,防止XSS、CSRF等攻击。 总之,Spring Framework 4.0.x不仅在功能上进行了增强,更在性能...

    spring struts2整合

    - 谨慎设计bean的生命周期,避免内存泄漏或不必要的资源消耗。 整合Spring和Struts2可以使项目受益于两者的优点,提高开发效率,增强应用的可维护性和可扩展性。然而,随着Spring Boot和Spring MVC的流行,现代...

    SpringMVC文件上传与下载

    - **内存管理**:及时清理上传的临时文件,避免内存泄漏。 以上就是Spring MVC中文件上传和下载的关键知识点,通过这些知识可以有效地实现在Web应用中处理文件上传和下载的需求。在实际开发中,还应注意性能优化和...

Global site tag (gtag.js) - Google Analytics