在Spring Data应用程序上累积的MongoCleaner线程

用户名

我有一个Java网站,使用Spring Data提供与MongoDB的集成。该应用程序运行良好,但是会不断累积线程,直到服务器最终因以下错误而关闭:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongo': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
2013-10-15T14:51:40.305986+00:00 app[web.1]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongo': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
2013-10-15T14:51:40.305986+00:00 app[web.1]: 1343234 [http-nio-55996-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet  - Could not complete request
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at org.springframework.contex
t.support.GenericXmlApplicationContext.<init>(GenericXmlApplicationContext.java:71)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
2013-10-15T14:51:40.305986+00:00 app[web.1]:    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:591)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at com.jux.model.Signin.persistSignin(Signin.java:40)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at com.intuit.controller.LoginController.authenticateUser(LoginController.java:71)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at java.lang.reflect.Method.invoke(Method.java:616)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.FrameworkServlet.
processRequest(FrameworkServlet.java:882)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
2013-10-15T14:51:40.306169+00:00 app[web.1]:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
2013-10-15T14:51:40.306334+00:00 app[web.1]:    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
2013-10-15T14:51:40.306875+00:00 app[web.1]:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
2013-10-15T14:51:40.306875+00:00 app[web.1]: Caused by: java.lang.OutOfMemoryError: unable to create new native thread
2013-10-15T14:51:40.306875+00:00 app[web.1]:    at java.lang.Thread.start0(Native Method)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
2013-10-15T14:51:40.306727+00:00 app[web.1]:    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
2013-10-15T14:51:40.306875+00:00 app[web.1]:    at com.mongodb.Mongo.<init>(Mongo.java:192)
2013-10-15T14:51:40.306875+00:00 app[web.1]:    at java.lang.Thread.start(Thread.java:657)

我试图更新我正在使用的Spring Data的版本,并尝试使用1.3.1.RELEASE和1.3.2BUILD-SNAPSHOT-相同的问题。

我还读过Mongo驱动程序应该关闭这些线程,而关闭线程不需要做任何事情,但是我开始怀疑。任何想法如何解决这个问题?

这是我的mongodb.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Default bean name is 'mongo' -->
    <mongo:mongo host="xxxxxx.mongolab.com" port="12345">
        <mongo:options connections-per-host="8"
                   threads-allowed-to-block-for-connection-multiplier="4"
                   connect-timeout="1000"
                   max-wait-time="1500"
                   auto-connect-retry="true"
                   socket-keep-alive="true"
                   socket-timeout="1500"
                   slave-ok="true"
                   write-number="1"
                   write-timeout="0"
                   write-fsync="true"/>
    </mongo:mongo>
    <mongo:db-factory id="myMongoDbFactory"
                  host="xxxxx.mongolab.com"
                  port="12345"
                  dbname="zzzz"
                  username="yyyy"
                  password="xxxx"/>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="myMongoDbFactory"/>
    </bean>

</beans>

这是我在控制器中对MongoDB进行查询的方式:

@RequestMapping(value = "/deletePart.htm", method = RequestMethod.GET)
public String deletePart(String part_id) {
    LOG.debug("in deletePart, part_id: "+part_id);
    ApplicationContext ctx = new GenericXmlApplicationContext("mongodb.xml");
    MongoOperations mongoOps = (MongoOperations)ctx.getBean("mongoTemplate");
    Part p = mongoOps.findOne(new Query(where("id").is(part_id)), Part.class);
    mongoOps.remove(p);     
    return "redirect:/parts.htm";
}

这是线程如何不断累积和永不关闭的图片: 线程累积:

在线程转储中,这是一个挂起线程的详细信息:

"MongoCleaner1448498515" daemon prio=5 tid=0x00007f939f888000 nid=0x12f03 waiting on condition [0x00000001ac920000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at com.mongodb.Mongo$CursorCleanerThread.run(Mongo.java:770)

   Locked ownable synchronizers:
    - None
杰敏

如果关闭应用程序上下文,将关闭Mongo实例并防止线程不受限制地增长:

@RequestMapping(value = "/deletePart.htm", method = RequestMethod.GET)
public String deletePart(String part_id) {
   LOG.debug("in deletePart, part_id: "+part_id);
   GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("mongodb.xml");
   try {
      MongoOperations mongoOps = (MongoOperations)ctx.getBean("mongoTemplate");
      Part p = mongoOps.findOne(new Query(where("id").is(part_id)), Part.class);
      mongoOps.remove(p);     
      return "redirect:/parts.htm";
   } finally {
      ctx.close();   // close the context, will close the Mongo instance
   }
}

但是,即使这可行,您的应用程序仍不应为每个请求创建应用程序上下文实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Spring Data应用程序上累积的MongoCleaner线程

来自分类Dev

Spring 应用程序上的 NoClassDefFoundError

来自分类Dev

如何通过使用JavaConfig在Spring MVC 4.0应用程序上应用JSON?

来自分类Dev

Spring应用程序上的多个邮件服务器

来自分类Dev

如何在Spring Boot应用程序上注册javax.jws.Webservice

来自分类Dev

无法在Spring Boot应用程序上启用基本身份验证

来自分类Dev

访问 PCF Spring Boot 应用程序上的 VCAP 属性

来自分类Dev

Spring递归加载应用程序上下文

来自分类Dev

Spring应用程序上下文为null

来自分类Dev

Spring应用程序-应用程序上下文IOC

来自分类Dev

无法在 Spring Boot 应用程序中加载应用程序上下文

来自分类Dev

如何在没有SAML的情况下在多个Spring Security Web应用程序上使用SSO?

来自分类Dev

在没有SAML的情况下如何在多个Spring Security Web应用程序上使用SSO?

来自分类Dev

Spring Boot应用程序上的两种身份验证机制(Basic和JWT)

来自分类Dev

如何在基于 Spring 的应用程序上使用所有 AspectJ 切入点指示符?

来自分类Dev

Spring WebApp-在应用程序停止时关闭线程

来自分类Dev

Web应用程序中的线程(servlet,Spring,hibernate)

来自分类Dev

Spring WebApp-在应用程序停止时关闭线程

来自分类Dev

具有(Spring)ThreadPoolTaskExecutor的多线程应用程序

来自分类Dev

Web应用程序中的线程(servlet,Spring,hibernate)

来自分类Dev

独立于应用程序业务逻辑的Spring异步线程

来自分类Dev

Spring Data Cassandra无法启动的Spring Boot应用程序

来自分类Dev

如何从测试应用程序上下文中排除 Spring Boot 应用程序 bean?

来自分类Dev

线程冻结了Android应用程序上的活动

来自分类Dev

在退出应用程序上安全退出Qt线程

来自分类Dev

在Spring Boot中运行调度程序会生成Spring Boot应用程序上下文外部的进程

来自分类Dev

重新加载或刷新测试方法中的Spring应用程序上下文?

来自分类Dev

Spring 4中的差异应用程序上下文

来自分类Dev

从应用程序上下文中删除Spring Bean

Related 相关文章

  1. 1

    在Spring Data应用程序上累积的MongoCleaner线程

  2. 2

    Spring 应用程序上的 NoClassDefFoundError

  3. 3

    如何通过使用JavaConfig在Spring MVC 4.0应用程序上应用JSON?

  4. 4

    Spring应用程序上的多个邮件服务器

  5. 5

    如何在Spring Boot应用程序上注册javax.jws.Webservice

  6. 6

    无法在Spring Boot应用程序上启用基本身份验证

  7. 7

    访问 PCF Spring Boot 应用程序上的 VCAP 属性

  8. 8

    Spring递归加载应用程序上下文

  9. 9

    Spring应用程序上下文为null

  10. 10

    Spring应用程序-应用程序上下文IOC

  11. 11

    无法在 Spring Boot 应用程序中加载应用程序上下文

  12. 12

    如何在没有SAML的情况下在多个Spring Security Web应用程序上使用SSO?

  13. 13

    在没有SAML的情况下如何在多个Spring Security Web应用程序上使用SSO?

  14. 14

    Spring Boot应用程序上的两种身份验证机制(Basic和JWT)

  15. 15

    如何在基于 Spring 的应用程序上使用所有 AspectJ 切入点指示符?

  16. 16

    Spring WebApp-在应用程序停止时关闭线程

  17. 17

    Web应用程序中的线程(servlet,Spring,hibernate)

  18. 18

    Spring WebApp-在应用程序停止时关闭线程

  19. 19

    具有(Spring)ThreadPoolTaskExecutor的多线程应用程序

  20. 20

    Web应用程序中的线程(servlet,Spring,hibernate)

  21. 21

    独立于应用程序业务逻辑的Spring异步线程

  22. 22

    Spring Data Cassandra无法启动的Spring Boot应用程序

  23. 23

    如何从测试应用程序上下文中排除 Spring Boot 应用程序 bean?

  24. 24

    线程冻结了Android应用程序上的活动

  25. 25

    在退出应用程序上安全退出Qt线程

  26. 26

    在Spring Boot中运行调度程序会生成Spring Boot应用程序上下文外部的进程

  27. 27

    重新加载或刷新测试方法中的Spring应用程序上下文?

  28. 28

    Spring 4中的差异应用程序上下文

  29. 29

    从应用程序上下文中删除Spring Bean

热门标签

归档