2015-12-10 24 views
0

Grails的性能&內存泄漏問題 -Grails的內存泄漏 - ConcurrentHashMap的

我們有對JDK 6.0,可以部署到JBoss 5.1和WebSphere 8.5.5.4環境運行的V2.1.1 Grails的三層Web應用程序。 我們目前有內存問題,經過幾個小時的Seleninum測試運行後,堆空間耗盡。 使用JavaMelody和YourKit工具,我們發現其中一個重大泄漏嫌疑人是'ConcurrentHashMap',但無法追溯到我們自己的代碼, 以及大多數指向Grails框架庫的嫌疑人。任何提示? 我們正在尋找有償服務來幫助我們解決這個問題,如果有人在這方面很熟悉。

我們使用的Grails插件列表。是否有列出的插件你已經在過去的內存問題,我們應該避免或更換經歷:

<?xml version="1.0" encoding="UTF-8"?> 
<module type="JAVA_MODULE" version="4"> 
    <component name="FacetManager"> 
    <facet type="web" name="GrailsWeb"> 
     <configuration> 
     <webroots> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/web-app" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/views" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/web-app" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/views" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/views" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/web-app" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1/web-app" relative="/" /> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/web-app" relative="/" /> 
     </webroots> 
     <sourceRoots /> 
     </configuration> 
    </facet> 
    <facet type="hibernate" name="Hibernate"> 
     <configuration> 
     <datasource-map /> 
     <naming-strategy-map /> 
     </configuration> 
    </facet> 
    </component> 
    <component name="NewModuleRootManager" inherit-compiler-output="true"> 
    <exclude-output /> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5/src/groovy" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/grails-melody-1.58.0"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/grails-melody-1.58.0/src/groovy" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/grails-app/i18n" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-2.1.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-2.1.1/grails-app/i18n" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/grails-app/i18n" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/services" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/controllers" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/domain" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/services" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jxl-0.54"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jxl-0.54/src/groovy" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/services" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/grails-app/services" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/grails-app/i18n" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2/src/groovy" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-mobile-0.5.1" /> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/src/java" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/src/groovy" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/services" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/i18n" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/controllers" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/domain" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/services" isTestSource="false" /> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/taglib" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/src/groovy" isTestSource="false" /> 
    </content> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/tomcat-2.1.1" /> 
    <content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/webxml-1.4.1"> 
     <sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/webxml-1.4.1/src/groovy" isTestSource="false" /> 
    </content> 
    <orderEntry type="inheritedJdk" /> 
    <orderEntry type="sourceFolder" forTests="false" /> 
    <orderEntry type="library" scope="PROVIDED" name="grails-2.1.1" level="application" /> 
    <orderEntry type="module-library" exported=""> 
     <library name="Grails User Library (myApp-grailsPlugins)"> 
     <CLASSES> 
      <root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/lib" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.w3c.css/sac/jars/sac-1.3.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.cssparser/cssparser/jars/cssparser-0.9.5.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.nekohtml/nekohtml/jars/nekohtml-1.9.14.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/xerces/xercesImpl/jars/xercesImpl-2.9.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.htmlunit/htmlunit-core-js/jars/htmlunit-core-js-2.8.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.james/apache-mime4j/jars/apache-mime4j-0.6.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpmime/jars/httpmime-4.0.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpcore/jars/httpcore-4.0.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/xalan/xalan/jars/xalan-2.7.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.htmlunit/htmlunit/jars/htmlunit-2.8.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.seleniumhq.selenium/selenium-common/jars/selenium-common-2.0a7.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.seleniumhq.selenium/selenium-htmlunit-driver/jars/selenium-htmlunit-driver-2.0a7.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/log4j/log4j/jars/log4j-1.2.14.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.jexcelapi/jxl/jars/jxl-2.6.12.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework/spring-test/jars/spring-test-3.1.0.RELEASE.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/javax.activation/activation/jars/activation-1.1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/javax.mail/mail/jars/mail-1.4.3.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.quartz-scheduler/quartz/jars/quartz-2.1.6.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.mobile/spring-mobile-device/jars/spring-mobile-device-1.1.0.RELEASE.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.hibernate/jtidy/jars/jtidy-r8-20060801.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.hibernate/hibernate-tools/jars/hibernate-tools-3.6.0.CR1.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/freemarker/freemarker/jars/freemarker-2.3.8.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.security/spring-security-web/jars/spring-security-web-3.0.7.RELEASE.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.security/spring-security-core/jars/spring-security-core-3.0.7.RELEASE.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/mysql/mysql-connector-java/jars/mysql-connector-java-5.1.20.jar!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-mobile/zips/spring-mobile-0.5.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jxl/zips/jxl-0.54.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hawk-eventing/zips/hawk-eventing-0.5.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/svn/zips/svn-1.0.0.M1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hibernate-hijacker/zips/hibernate-hijacker-0.8.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/multi-tenant-single-db/zips/multi-tenant-single-db-0.8.3.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/mail/zips/mail-1.0.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-security-ui/zips/spring-security-ui-0.2.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/plugin-config/zips/plugin-config-0.1.5.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/quartz2/zips/quartz2-2.1.6.2.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/db-reverse-engineer/zips/db-reverse-engineer-0.5.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jquery-ui/zips/jquery-ui-1.8.15.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/famfamfam/zips/famfamfam-1.0.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-security-core/zips/spring-security-core-1.2.7.3.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jquery/zips/jquery-1.8.0.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hibernate/zips/hibernate-2.1.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/grails-json-rest-api-extended/zips/grails-json-rest-api-extended-0.2.6.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/tomcat/zips/tomcat-2.1.1.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/resources/zips/resources-1.2.zip!/" /> 
      <root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/webxml/zips/webxml-1.4.1.zip!/" /> 
     </CLASSES> 
     <JAVADOC /> 
     <SOURCES /> 
     <jarDirectory url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/lib" recursive="false" /> 
     </library> 
    </orderEntry> 
    </component> 
</module> 
+0

我記得讀過關於jdk 6和併發哈希映射的東西。周圍的問題緩慢不確定是否泄漏內存。你不能嘗試jdk7看看是怎麼回事? – Vahid

+0

如果您正在尋找支付支持,OCI可以幫助https://grails.org/support.html –

+0

格雷姆,我們已經通過電子郵件發送給OCI,但沒有人聯繫過我們。誰是Grails支持的良好聯繫人?謝謝。 – dhwang

回答

0

的java.util.HashMap不是併發的,所以如果你是在一個Grails服務使用它或控制器,它可能會獲得併發更新,這會導致各種問題,其中之一可能導致在服務器上運行時發生內存泄漏。

嘗試使用其中一個併發哈希映射代替,如java.util.concurrent.ConcurrentHashMap,並查看問題是否消失。