Java 为什么在Google应用程序引擎上首次访问JSP文件需要更长的时间?
这是我的测试:我访问一个servlet来加载JVM(吸收加载请求)。然后,我访问一个JSP,其中包含Java 为什么在Google应用程序引擎上首次访问JSP文件需要更长的时间?,java,google-app-engine,Java,Google App Engine,这是我的测试:我访问一个servlet来加载JVM(吸收加载请求)。然后,我访问一个JSP,其中包含,没有其他内容。第一次访问此JSP使用350毫秒的CPU时间,延迟为200毫秒。后续访问的延迟和cpu时间约为20ms 为什么启动servlet容器后第一次访问jsp需要更长的时间 编辑:请注意,Google应用程序引擎应该预编译JSP。当我上传我的应用程序时,我可以在控制台输出中看到,初始化预编译… 编辑:它是对任何JSP的第一次访问,然后是后续访问,即使对不同JSP的访问不会花费很长时间。这就
,没有其他内容。第一次访问此JSP使用350毫秒的CPU时间,延迟为200毫秒。后续访问的延迟和cpu时间约为20ms
为什么启动servlet容器后第一次访问jsp需要更长的时间
编辑:请注意,Google应用程序引擎应该预编译JSP。当我上传我的应用程序时,我可以在控制台输出中看到,初始化预编译…
编辑:它是对任何JSP的第一次访问,然后是后续访问,即使对不同JSP的访问不会花费很长时间。这就好像JSP系统有一些加载任务要做或做些什么
另外,这不是一个加载请求,我在访问JSP以吸收加载请求之前先访问一个servlet。此外,任何加载请求都不会使用少于500毫秒的CPU时间。JSP在第一次访问/请求时被编译为扩展
HttpServlet
的类。一些servletcontainers将在启动时直接编译它(或者可以配置),这样您就不会注意到“滞后”。其他人不支持它,然后您需要自己预编译JSP文件并使用它部署WAR
我从未使用过它,所以我无法从头开始回答,但快速浏览一下它,我就知道,通过在appengine web.xml
文件中添加以下条目:
<precompilation-enabled>true</precompilation-enabled>
true
更新:根据appengine文档的性能部分,它似乎会按需启动(和关闭)JVM,这可能会导致“加载请求”。以下是一个摘录:
什么是加载请求?
某些请求运行较慢,因为应用程序
引擎需要创建一个新的Java
虚拟机来为
要求我们把这种要求叫做,
装载请求。装货时
根据您的请求,您的申请将继续进行
初始化(如类加载、,
JIT编译等)导致
请求花费更长的时间
对于已被删除的慢速请求
接近应用程序引擎的请求
截止日期,额外的初始化可以
将其推过最后期限,导致
DeadLineExceedexception。什么原因
加载请求
AppEngine按需启动JVM,所以
有几个原因可以解释为什么你会这样做
接收加载请求:
换句话说,这是无法以任何编程方式解决的。要么与它一起生活,要么考虑一个专用的服务器,它有一个完整的Services容器。谢谢,Balus,我已经预编译为真的。对,加载请求是重要的,在我的测试中,在访问JSP之前,我吸收了加载请求。还要注意,它只是第一次访问任何JSP。