gpt4 book ai didi

hibernate - Grails应用启动太慢

转载 作者:行者123 更新时间:2023-12-02 15:19:05 25 4
gpt4 key购买 nike

我正在使用grails 2.4.4开发Web应用程序,Grails(使用jetty插件)花费了大约20秒钟的时间来初始化并使该应用程序可用。

我可以花相当长的时间来解决问题,但是对于较旧的硬件来说,启动整个过程需要3分钟,因此我需要更快的速度,因为一旦服务器启动,性能就不错,而不是要担心的问题。

在SO中进行了谷歌搜索,发现jar扫描servlet注释可能是问题,并在WEB-INF / lib中的类上将其禁用,并将其添加到应用上下文xml中:

<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
<Arg>nothing.jar$</Arg>
</Call>

这有助于将时间从16秒减少到13秒。
还尝试使用配置为2.5而不是3.0的Servlet 2.5进行构建(并迁移到 jetty 7),以尝试进一步改进此功能,因为注释扫描是Servlet 3.0的一项功能,但是速度却很小(大约1秒)。

我的目标是将时间减少到6s,因为在我测试过的最旧的硬件中,它花费了大约3分钟的时间,因此它慢了大约10倍,并且1分钟的启动时间是可以忍受的。

我在实现该目标上有些失落。通过日志查看,上下文初始化大约需要2000ms

2017-02-08 02:15:08,318 [main] INFO context.ContextLoader-根WebApplicatio
nContext:初始化在2001 ms中完成

有没有可能加快这一步?

最佳答案

如果您使用的是Jetty 9.x,则应知道必须进行类路径/字节码扫描,因为它是Servlet 3.1的实现(需要这样做)。

使用org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern仅会跳过WEB-INF/lib中的这些jar,但仍会扫描您的容器类路径(这意味着您在 Activity grails环境中的所有内容)。

Note: you should never have a production server kicked from a build tool (maven, grails, etc) as that is a huge performance and security risk.



无法通过换出servlet支持jar来更改扫描行为(实际上,您不能将Servlet 2.5 jar与Jetty一起使用,它将完全失败)。 Servlet 2.5 jar交换的实际作用是更改应用程序的支持级别,而不是改变Jetty中的行为。

但是,一切都不会丢失,您可以“预先计算”扫描需求,并使用Jetty 9的 quickstart features通过提供所需的内容来启动应用程序,从而避免每次启动时重复进行扫描。

云提供商大量使用了快速启动技术,以使Web应用程序几乎即时启动(通常不到500毫秒)。

Note: if you are using hibernate, spring, cdi, or other libraries that have their own Annotations, then there is very often another bytecode scanning step performed by that library, not Jetty.

关于hibernate - Grails应用启动太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42105753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com