7

doGet() servlet 中的一个非常简单的 java 代码在 GAE 上获得了超过一秒的 cpu 时间。我已经阅读了一些与配额相关的文档,显然我没有做错任何事情。

//Request the user Agent info
String userAgent = req.getHeader("User-Agent");

我想知道使用 CPU 最多的是什么,我使用了 google 帮助推荐。

    //The two lines below will get the CPU before requesting User-Agent Information
    QuotaService qs = QuotaServiceFactory.getQuotaService();
    long start = qs.getCpuTimeInMegaCycles();

    //Request the user Agent info
    String userAgent = req.getHeader("User-Agent");

    //The three lines below will get the CPU after requesting User-Agent Information 
    // and informed it to the application log.
    long end = qs.getCpuTimeInMegaCycles();
    double cpuSeconds = qs.convertMegacyclesToCpuSeconds(end - start);
    log.warning("CPU Seconds on geting User Agent: " + cpuSeconds);

上面代码告诉我的唯一一件事是检查标头将使用超过一秒(1000 毫秒)的 cpu 时间,这对于 Google 来说是日志面板上的警告。这似乎是一个非常简单的请求,并且仍然使用超过一秒的 cpu。

我错过了什么?


下面的日志图片供大家娱乐。 Google App Engine 慢速报告的日志

为了所有人的利益,我发布了完整的代码。

@SuppressWarnings("serial")
public class R2CComingSoonSiteServlet extends HttpServlet {

private static final Logger log = Logger.getLogger(R2CComingSoonSiteServlet.class.getName());

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    //The two lines below will get the CPU before requesting User-Agent Information
    QuotaService qs = QuotaServiceFactory.getQuotaService();
    long start = qs.getCpuTimeInMegaCycles();

    //Request the user Agent info
    String userAgent = req.getHeader("User-Agent");

    //The three lines below will get the CPU after requesting User-Agent Information 
    // and informed it to the application log.
    long end = qs.getCpuTimeInMegaCycles();
    double cpuSeconds = qs.convertMegacyclesToCpuSeconds(end - start);
    log.warning("CPU Seconds on geting User Agent: " + cpuSeconds);

    userAgent = userAgent.toLowerCase();
    if(userAgent.contains("iphone"))
        resp.sendRedirect("/mobIndex.html");
    else
        resp.sendRedirect("/index.html");} }
4

3 回答 3

4

App Engine 上不再有任何每分钟配额。任何提及他们的消息都是过时的。如果您想更好地分析您的 CPU 使用情况,您可能需要尝试新发布的 Java appstats

于 2010-03-29T09:07:57.373 回答
0

上面代码告诉我的唯一一件事是检查标头将使用超过一秒(1000 毫秒)的 cpu 时间,这对于 Google 来说是日志面板上的警告。这似乎是一个非常简单的请求,并且仍然使用超过一秒的 cpu。

如果不调用配额 API,这也会发生吗?

于 2010-03-29T03:18:42.683 回答
0

您的日志显示它有时只是很慢。

你的 servlet 对象的构造真的很慢吗?

于 2010-03-29T03:33:49.490 回答