你好,我使用了一个servlet,它包含一个具有两个对象的持久性管理器对象,当我在仪表板中使用它时,我会收到以下消息:
“此URI占用大量cpu,可能很快就会超出其配额。”
我这个uri的平均Cpu是2300,为什么花了这么长时间?
当我开始查看日志时,我有大量的cpu,例如2000,而在我有不到200个cpu之后,为什么?
10分钟后,当我回来的时候,我又有了大量的cpu,为什么?
有没有可能减少这段时间?
编辑:代码
公共无效doGet(HttpServletRequest请求,HttpServletResponse响应)抛出IOException {
String param1 = req.getParameter("param1");
String param2 = req.getParameter("param2");
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + Myclass.class.getName()+
"where parameter1 == param1 && parameter2 == param2 "+
"parameters String param1, String param2";
List<Myclass> result = (List<Myclass>) pm.newQuery(query).execute(param1, param2);
if(result.isEmpty()) {
pm.close();
resp.sendRedirect("/welcome.jsp");
}
else {
pm.close();
resp.sendRedirect("/question.jsp");
}
}
发布于 2010-08-20 13:10:22
这是因为谷歌应用程序引擎的cold starts。
因为google app engine的工作方式是,如果在一段时间内看不到请求,它就会终止应用程序实例。因此,在一段休息之后的第一个请求需要更长的时间,并且后续的请求相对较快。
有许多讨论这个问题和可能的解决方案的帖子,主要描述了两种解决方案-
下面是更多关于这个问题的讨论:
https://stackoverflow.com/questions/3522430
复制相似问题