改善GoogleAppEngine Spring Web应用程序的启动时间

时间:2015-10-13 11:47:36

标签: java xml spring google-app-engine spring-mvc

我有一个在GAE中运行的java Web应用程序。我使用Spring进行servlet调度。我使用它,以便我可以使用注释来定义我的servlet中的调用,以便它执行所有参数解析和结果转换。 GAE中Web应用程序的加载时间大约是10秒,我想知道是否有办法缩短它。谢谢。

这是我的web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">


<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>publisher-servlet</servlet-name>
    <servlet-class>
                com.example.webapp.PublisherServlet
            </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>publisher-servlet</servlet-name>
    <url-pattern>/publisher</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>

<context-param>
    <param-name>contextClass</param-name>
    <param-value>com.example.webapp.CustomXmlWebApplicationContext</param-value>
</context-param>

和我的mvc-dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<mvc:annotation-driven />

<bean class="com.y2apps.quoteformessenger.webapp.ClientController">
</bean>

这是启动服务器的第一次调用的服务器日志

I 2015-10-13 14:19:54.937  200 119.69 KB 10.98 s I 14:19:59.222 I 14:20:05.916 /getallcategorylists?typeId=2
             84.229.82.245 - - [13/Oct/2015:04:19:54 -0700] "GET /getallcategorylists?typeId=2 HTTP/1.1" 200 122562 - "okhttp/2.2.0" "iron-core-93812.appspot.com" ms=10978 cpu_ms=13017 cpm_usd=0.01369737 instance=00c61b117c057f572d9967e34ef8e65bb7cbfdcd app_engine_release=1.9.27 trace_id=-
I 14:19:59.222 javax.servlet.ServletContext log: Initializing Spring FrameworkServlet 'mvc-dispatcher'
I 14:20:05.916 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

2 个答案:

答案 0 :(得分:1)

我尝试了一切,但无法缩短10秒的启动时间。我认为这对我来说太重要了,所以我从服务器上删除了弹簧,并将启动时间从10秒减少到4-5秒。

答案 1 :(得分:0)

正如Andy Turner所提到的,跳过这个漫长启动时间的最佳选择是Warmup Requests,这将......嗯,“预热”你的实例,并预加载某些需要的东西加载,意味着当第一个请求进入时,您的实例将“准备好开始运行”。

其他建议(不加载bean两次并最小化类路径扫描)肯定也会有所帮助。除了这三个建议之外,你无能为力。