AIX上生产中的慢动态GSP重新加载

时间:2013-07-31 14:36:50

标签: performance grails compilation aix gsp

我们正在使用在AIX 6.1.0.0上运行的Grails 2.2.4,WebSphere 8.0.0.5。 Websphere正在使用IBM JDK:

  

Java(TM)SE运行时环境(构建pap6460_26sr3ifix-20121005_02(SR3 + IV27268 + IV27928 + IV28217 + IV25699))

     

IBM J9 VM(build 2.6,JRE 1.6.0 AIX ppc64-64 20120919_122629(已启用JIT,已启用AOT)

     

J9VM - R26_Java626_SR3_iFix_1_20120919_1316_B122629

     

JIT - r11.b01_20120808_24925ifx1

     

GC - R26_Java626_SR3_iFix_1_20120919_1316_B122629 J9CL - 20120919_122629)

     

JCL - 20120713_01

问题是使用:

grails.gsp.enable.reload = true
grails.gsp.view.dir="/path/to/gsp/views"

速度很慢,我认为渲染一个小型GSP需要20秒。有趣的是,在我们的本地开发环境中需要2秒钟。

我们已经通过控制器除了在模型中没有任何内容的空白GSP上调用渲染(...)之外什么也没做什么来解决这个问题,所以我只能假设它是编译但我可能是错的。

有没有人遇到过渲染GSP速度极慢的其他实例,或者有任何建议,或许这是AIX上某种奇怪的JDK问题?

除了赏金之外,无论谁正确回答这个问题都可以免费获得华夫饼。

编辑前几天注意到这一点:有三个环境具有相同的WAS配置和设置,其中一个工作正常,所以它肯定是某种环境问题。

5 个答案:

答案 0 :(得分:1)

我同意你的怀疑,这是编译时间。也许你grails.gsp.view.dir很慢 - 也许是网络文件系统?

遗憾的是,真正的答案是不在生产中启用GSP重新加载。 它显然意味着开发方便,并不打算在生产中表现良好。

答案 1 :(得分:1)

确保正在预处理sitemesh

grails.views.gsp.sitemesh.preprocess=true

此外,我怀疑这是锁定问题而不是编译问题。

要至少减少此问题,请设置以下配置

grails.gsp.reload.interval= time in milliseconds.
取决于你的舒适度。也许每个小时?

如果您的文件过早更改上次修改时间,则需要按

降低粒度
grails.gsp.reload.granularity= Time in milliseconds. 

通过

限制重新加载的类数
grails.reload.excludes 

grails.reload.includes

还要记住视图路径必须以斜线结尾。我在你提供的例子中没有看到。

答案 2 :(得分:1)

虽然我无法告诉您问题的原因,但我可以为您指出一个可以帮助您查看性能问题的工具。

Grails Miniprofiler插件是用于检查端到端性能的绝佳工具,一直到视图(这是您认为问题所在的位置)。

在我的一个项目的一些GSP上,我惊讶地发现一些观点在SQL调用方面有多么沉重(通过延迟加载)。

你可能怀疑问题在哪里,也许你在这个特定的平台上遇到了一个模糊的错误,但是有难以指出瓶颈的数据非常有用。

对于它的价值,我没有看到你在我的任何操作系统/环境中描述的问题。但我确实记得尝试部署到JBoss 6.1时经历了严重的痛苦(自解决以来),因此我对Grails在某些环境中可能存在问题的想法很敏感。

祝您好运......

Grails Miniprofiler plugin

答案 3 :(得分:0)

我们在尝试在Gsp页面上呈现Birt报告的应用程序上遇到了同样的问题(在prod服务器上花了5分钟,我们使用了Tomcat和Mysql),没有回答,但建议您可能需要使用grails缓存插件,具有基于您的要求缓存gsp页面的功能。

grails.org/plugin/cache‎

答案 4 :(得分:0)

原来问题是http://grails.org/plugin/grails-melody。谁知道!