Grails开发环境页面加载速度非常慢

时间:2013-08-07 12:35:41

标签: grails

所以我的页面加载时间在30-45秒之间。

一些历史:

这个项目的情况并非总是如此。这个项目正在生产中,所以我有一段时间没有真正触及过代码。我注意到它最后一次更新代码时就开始发生了。我不记得我改变的任何具体问题应该与问题有关。我有其他项目使用相同的Grails版本运行没有问题。

我认为它开始发生在2.2.3中。我现在正在运行2.2.4。

我使用的是x64 JDK 1.7.0_25,Windows 7 x64。

我不确定这里还有什么相关内容。任何帮助表示赞赏!

编辑:使用-noreloading运行无效。

Edit2 :我已尝试完全删除.grails文件夹,运行clean,并删除目标文件夹和堆栈跟踪日志。

Edit3 :似乎所花费的时间取决于显示/读取的数据量。小页面需要3-4秒。中页10-12秒......

Edit4 :我通过IntelliJ IDEA 12.1.4 x64(idea64.exe)运行它。我也在IntelliJ之外尝试了相同的结果。

Edit5 :数据库是支持整个公司的Oracle企业。它由全职管理员管理。这不是我本地计算机上的MySQL服务器。

Edit6 :在TEST(test war)中部署时,应用程序也能正常运行,但在使用test run-app运行时仍然很慢。

开始到达某个地方: 我下载了JDK 1.7.21并运行了应用程序,它开始工作没有问题!然后我运行clean触发重新编译,它停止工作...... grr

现在1.7.21仍处于活动状态,我尝试-noreloading并且它有效!

Annnd ...现在即使我不使用-noreloading ..........

也能正常工作

我已经回到了1.7.25 ..跑clean,它有效。 Sooooooo是的...解释一下。

现在它已不复存在了。

4 个答案:

答案 0 :(得分:1)

这是在Linux下但可能有用:

如果您在IDE中运行代码:

ps auwx | grep java

-Dgrails.console.class = grails.build.logging.GrailsEclipseConsole -Dosgi.requiredJavaVersion = 1.6 -Xms40m -Xmx768m -XX:MaxPermSize = 256m -

正如您所看到的,Xms和Xmx的内存设置非常低......

在IDE中应该有一个INI文件:

more STS.ini 
      1 -vm
      2 /usr/lib/jvm/java-6-openjdk-amd64/bin/java
      3 -startup
      4 plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
      5 --launcher.library
      6 plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20120913-144807
      7 -product
      8 org.springsource.sts.ide
      9 --launcher.defaultAction
     10 openFile
     11 -vmargs
     12 -Dgrails.console.enable.interactive=false
     13 -Dgrails.console.enable.terminal=false
     14 -Djline.terminal=jline.UnsupportedTerminal
     15 -Dgrails.console.class=grails.build.logging.GrailsEclipseConsole
     16 -Dosgi.requiredJavaVersion=1.6
     17 -Xms40m
     18 -Xmx768m
     19 -XX:MaxPermSize=256m

您可以升级这些值并尝试重新启动IDE ...

我还建议你在代码运行之前运行nmon之前/期间运行并监视磁盘/ cpu /网络吞吐量。

你可能会发现你正在锤击导致问题的开发盒。

如果制作很好,我真的不知道问题是什么..

E2A啊啊忘了它是在窗户下面所以没有挡风,但不是我试过它 - http://sourceforge.net/projects/jnmonanalyser/

E2A: 1.启用DataSource.groovy调试:

dataSource {
    pooled = true
    driverClassName ="com.mysql.jdbc.Driver"
    username = "aaa"
    password = "aaaa"
    //SQL Logging - refer to Config.groovy at hibernate.sql now
    logSql=true
    ...
  1. config.groovy - 如果您在BootStrap中尝试添加记录时遇到问题,这将阻止您的应用运行

    //失败时返回错误 //grails.gorm.failOnError=true

  2. 启用log4j并使用此部分或部分内容:

    // log4j configuration
    log4j {
        appender.stdout = "org.apache.log4j.ConsoleAppender"
        appender.'stdout.layout'="org.apache.log4j.PatternLayout"
        appender.'stdout.layout.ConversionPattern'='[%r] %c{2} %m%n'
        appender.stacktraceLog = "org.apache.log4j.FileAppender"
        appender.'stacktraceLog.layout'="org.apache.log4j.PatternLayout"
        appender.'stacktraceLog.layout.ConversionPattern'='[%r] %c{2} %m%n'
        appender.'stacktraceLog.File'="stacktrace.log"
        appender.'stacktraceLog.MaxFileSize'="1MB"
        rootLogger="error,stdout"
        logger {
            grails="error"
            StackTrace="error,stacktraceLog"
            org {
                codehaus.groovy.grails.web.servlet="error"  //  controllers
                codehaus.groovy.grails.web.pages="error" //  GSP
                codehaus.groovy.grails.web.sitemesh="error" //  layouts
                codehaus.groovy.grails."web.mapping.filter"="error" // URL mapping
                codehaus.groovy.grails."web.mapping"="error" // URL mapping
                codehaus.groovy.grails.commons="info" // core / classloading
                codehaus.groovy.grails.plugins="error" // plugins
                codehaus.groovy.grails.orm.hibernate="error" // hibernate integration
    
                // Hibernate should be on - if you want to catch sql logs
                springframework="off"
                hibernate="on"
                //hibernate.SQL = 'debug'
                //hibernate.type = 'trace'
                //hibernate.SQL = 'info,hibernate'
                //hibernate.type = 'info,hibernate'
                //hibernate = 'info,hibernate'
    
    
                //apache.commons.digester.Digester = 'debug,javaclasses'
            }
        }
        additivity.StackTrace=false
    }
    

    尝试捕捉它正在做的事情,在浏览器上运行开发人员工具也是值得的,无论是Chrome的firefox还是试图弄清楚它当时正在采用什么元素 - 但是在日志和浏览器开发者工具之间应该说谎你的答案。

答案 1 :(得分:0)

通常你可以通过

解决这个问题
grails clean
grails命令行上的

(我在IntelliJ IDEA中通过CRTL + ALT + G打开它)。 这将擦除所有已编译的文件,并将从头开始重新编译您的项目(afaik),这通常会删除这样的错误。这不是对底层问题的真正修复,但它解决了这个问题。如果你问我,Grails是高度实验性和不稳定的,我有很多奇怪的错误,在做clean时通常会消失。顺便说一句,我也在Windows 7 x64上使用2.1.5。

答案 2 :(得分:0)

  1. 删除项目目标文件夹中的stacktrace文件。它可以 变得巨大。 (目前我的是48 GB)。
  2. 检查C目录中是否有足够的空间。
  3. 如果您是热插拔代码,那么页面加载可能会变慢。所以在这种情况下,重启dev服务器(grails app)。
  4. 有时,对服务器的请求可能会挂起,在命令提示符上聚焦(左键或右键单击cmd)似乎会跳过暂停。 (奇怪)
  5. 增加JVM permgen,堆空间取决于你的内存也可能有所帮助。
  6. 尝试在IDE中使用命令提示符运行服务器。
  7. 更好地使用行动方法而不是闭包。
  8. 对于具有3GB RAM的系统,我的环境变量设置为:

    JAVA_OPTS
    -Xms512m -Xmx1g  
    

    STS.ini设置:

    -startup
    plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
    -product
    com.springsource.sts.ide
    --launcher.defaultAction
    openFile
    --launcher.XXMaxPermSize
    384M
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xmn128m
    -Xms1024m
    -Xmx1024m
    -Xss2m
    -XX:PermSize=256m
    -XX:MaxPermSize=512m
    -XX:MaxGCPauseMillis=10
    -XX:MaxHeapFreeRatio=50
    -XX:+UseConcMarkSweepGC
    -XX:+CMSIncrementalMode
    -XX:+CMSIncrementalPacing
    -XX:+UserParallelGC
    

    8)问题可能与JDK和Grails版本组合有关。 OpenJDK 1.7u25 and spring loaded似乎有错误。好的,你没有使用OpenJDK,但无论如何都要尝试使用其他版本。试试JDK1.7u03 9)尝试使用-server标志的JVM,看看它是否提高了运行时性能。

    grails run-app -server
    

答案 3 :(得分:0)

所以发生这种情况的原因是:

JDK 1.7.25