Pergunta

Um código Java muito simples dentro de um servlet doGet() está obtendo mais de um segundo de tempo de CPU no GAE.Li alguma documentação relacionada a cotas e aparentemente não estou fazendo nada de errado.

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

Queria saber o que estava consumindo mais a CPU, utilizo uma recomendação de ajuda do 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);

A única coisa que o código acima me diz é que a inspeção do cabeçalho consumirá mais de um segundo (1000 ms) de tempo de CPU, o que para o Google é um aviso no painel de log.Essa parece ser uma solicitação muito simples e ainda usa mais de um segundo de CPU.

O que estou perdendo?


Abaixo a imagem dos logs para entretenimento de todos.logs for Google App Engine Slow Reports

Estou postando o código completo, para benefício de todos.

@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");} }
Foi útil?

Solução

Não há mais cotas por minuto no App Engine. Quaisquer mensagens que se referem a eles estão desatualizadas. Se você quiser fazer um melhor perfil do seu uso da CPU, convém experimentar o recém -lançado AppStats para Java.

Outras dicas

Seus logs mostram que às vezes é lento.

A construção do seu objeto de servlet é realmente lenta?

A única coisa que o código acima me diz é que a inspeção do cabeçalho consumirá mais de um segundo (1000 ms) de tempo de CPU, o que para o Google é um aviso no painel de log.Essa parece ser uma solicitação muito simples e ainda usa mais de um segundo de CPU.

Isso também acontece sem as chamadas para a API de cota?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top