AIX 上生产环境中缓慢的动态 GSP 重新加载
Posted
技术标签:
【中文标题】AIX 上生产环境中缓慢的动态 GSP 重新加载【英文标题】:Slow Dynamic GSP Reloading in Production on AIX 【发布时间】:2013-08-01 03:43:45 【问题描述】:我们使用 Grails 2.2.4、WebSphere 8.0.0.5 都在 AIX 6.1.0.0 上运行。 Websphere 正在使用 IBM JDK:
Java(TM) SE 运行时环境(构建 pap6460_26sr3ifix-20121005_02(SR3+IV27268+IV27928+IV28217+IV25699))
IBM J9 VM(内部版本 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"
很慢,我的意思是要花 20 秒来渲染一个小的 GSP。有趣的是,在我们的本地开发环境中,这需要 2 秒。
我们已经通过让控制器在模型中没有任何内容的空白 GSP 上调用 render(..) 来隔离这个问题,所以我只能假设它是编译,但我可能错了。
有没有人遇到过渲染 GSP 非常慢的其他实例,或者有任何建议,也许是 AIX 上某种奇怪的 JDK 问题?
除了赏金之外,回答正确的人将获得免费华夫饼。
编辑前几天刚刚注意到这一点:三个环境具有相同的 WAS 配置和设置,其中一个工作正常,因此肯定是某种环境问题。
【问题讨论】:
您可以尝试对 /path/to/gsp/views 进行 dd 测试吗? 本地开发环境,是本地WAS环境还是grails内嵌Tomcat? 我怀疑你已经看过记忆角度了,但我在记忆压力下也遇到过类似的怪事。这里有一个冗长的,可能相关的讨论:grails.1312388.n4.nabble.com/… 特别是 Graeme 在 2013 年 3 月 5 日的回复;上午 5 点 48 分 我确实尝试过 dd。 @dmahapatro 它是在 grails 中嵌入 Tomcat。 【参考方案1】:我同意您对编译时间的怀疑。也许您的 grails.gsp.view.dir 很慢 - 也许是网络文件系统?
不幸的是,真正的答案是不要在生产中启用 GSP 重新加载。 这显然是为了方便开发,而不是为了在生产中表现良好。
【讨论】:
不幸的是,我们别无选择,因为要求是允许人们随时更改它。 听起来你需要一个 CMS 您可以尝试使用相同的启用重新加载但只使用 tomcat 运行吗?我猜这是与 WAS 相关的问题 我们实际上正在使用 CMS。它的工作方式(这不是我们的设计)是当有人在 CMS 中发布更改时,它会替换 GSP,因此需要重新加载。 GSP 上有可以使用的标记库。 @JavaDev 有 3 个独立的 AIX 环境,其中一个实际上速度很快,并且具有相同的 WAS 设置和配置,因此肯定与环境有关。【参考方案2】:确保站点网格正在被预处理
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
还要记住视图路径必须以斜线结尾。我在您提供的示例中没有看到。
【讨论】:
【参考方案3】:虽然我无法告诉您问题的原因是什么,但我可以为您指出一个可以帮助您调查性能问题的工具。
Grails Miniprofiler 插件是一个出色的工具,用于检查端到端的性能,一直到视图(这是您认为问题所在)。
在我的一个项目的一些 GSP 上,我惊讶地发现某些视图在 SQL 调用方面变得如此沉重(通过延迟加载)。
您可能怀疑问题出在哪里,并且您可能在该特定平台上遇到了一个晦涩难懂的错误,但是用硬数字指出瓶颈非常有用。
不管怎样,我在我的任何操作系统/环境中都没有看到您描述的问题。但我确实记得在尝试部署到 JBoss 6.1 时遇到了严重的痛苦(自已解决),所以我对 Grails 在某些环境中可能出现问题的想法很敏感。
祝你好运……
Grails Miniprofiler plugin
【讨论】:
【参考方案4】:我们在尝试在 Gsp 页面上呈现 Birt 报告的应用程序上遇到了同样的问题(在产品服务器上需要 5 分钟,我们使用了 Tomcat 和 mysql),没有回答,但建议您可能需要使用grails缓存插件,可以根据你的需求缓存gsp页面。
grails.org/plugin/cache
【讨论】:
【参考方案5】:原来问题是https://plugins.grails.org/plugin/sergiomichels/grails-melody-plugin。谁知道!
【讨论】:
以上是关于AIX 上生产环境中缓慢的动态 GSP 重新加载的主要内容,如果未能解决你的问题,请参考以下文章