Question

Un code java très simple à l'intérieur d'un servlet doGet () devient de plus d'une seconde de temps cpu sur GAE. J'ai lu certains documents liés à des quotas et apparemment je ne fais rien de mal.

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

Je voulais savoir ce qui utilisait le processeur le plus, j'utiliser une recommandation d'aide 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);

La seule chose que le code me dit ci-dessus est que l'en-tête d'inspection utilisera plus d'une seconde (1000ms) de temps cpu, qui pour Google est un avertissement sur le panneau de journal. Cela semble être une demande très simple et est encore en utilisant plus d'une seconde de cpu.

Qu'est-ce que je suis absent?


Ci-dessous l'image des journaux pour le divertissement de tout le monde. journaux pour Google App Engine rapports lents

Je posterai le code complet, pour le bénéfice de tous.

@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");} }
Était-ce utile?

La solution

Il n'y a plus de quotas par minute sur App Engine. Tous les messages qui s'y réfèrent sont périmés. Si vous voulez mieux faire le profilage de votre utilisation du processeur, vous pouvez essayer la nouvelle version Appstats pour Java .

Autres conseils

Vos journaux montrent qu'il est parfois lent que.

est la construction de votre objet servlet vraiment lent?

  

La seule chose que le code me dit ci-dessus est que l'en-tête d'inspection utilisera plus d'une seconde (1000ms) de temps cpu, qui pour Google est un avertissement sur le panneau de journal. Cela semble être une demande très simple et est encore en utilisant plus d'une seconde de cpu.

Est-ce que cela arrive aussi sans les appels à l'API des quotas?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top