2

所以我得到的页面加载时间在 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.. run clean,它可以工作。太好了……解释一下。

而现在它不再。

4

4 回答 4

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 Ahhh 忘了它在 Windows 下,所以没有 nmon 用于风吹但嘿不是我试过 - 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

启用 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,并试图弄清楚它花费了哪些元素 - 但在日志和浏览器开发工具之间应该是你的答案.

于 2013-08-07T15:17:44.417 回答
0

通常你可以通过这样做来解决这个问题

grails clean

在 grails 命令行上(我在 IntelliJ IDEA 中通过 CRTL+ALT+G 打开它)。这会擦除所有已编译的文件,并将从头开始重新编译您的项目(afaik),这通常会擦除此类错误。这不是对潜在问题的真正解决方案,但它解决了问题。如果您问我,Grails 是高度实验性且不稳定的,我有很多奇怪的错误,通常在执行clean. 顺便说一句,我也在 Windows 7 x64 上使用 2.1.5。

于 2013-08-07T13:40:36.617 回答
0
  1. 删除项目目标文件夹中的 stacktrace 文件。它可以变得巨大。(目前我的是 48 GB)。
  2. 检查 C 目录中是否有足够的空间。
  3. 如果您正在热交换代码,那么页面加载可能会变慢。所以在这种情况下,重新启动开发服务器(grails 应用程序)。
  4. 有时,对服务器的请求可能会挂起,在命令提示符上聚焦(左键或右键单击 cmd)似乎跳过了暂停。(奇怪的)
  5. 根据您的内存增加 JVM permgen、堆空间也可能会有所帮助。
  6. 尝试使用命令提示符而不是在 IDE 中运行服务器。
  7. 比闭包更好地使用方法。

对于具有 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 和 spring loaded似乎有错误。好的,您没有使用 OpenJDK,但还是尝试使用其他版本。尝试使用JDK1.7u03.
9) 尝试带有 -server 标志的 JVM,看看它是否提高了运行时性能。

grails run-app -server
于 2013-08-07T19:49:05.720 回答
0

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

JDK 1.7.25

于 2013-08-08T12:20:18.887 回答