7
votes

Comment utiliser Java sur Google App Moteur sans dépasser les quotas minimes?

Un code Java très simple à l'intérieur d'un servlet Doget () obtient plus d'une seconde heure de la CPU sur GAE. J'ai lu une documentation liée au quota et apparemment je ne fais rien de mal.

@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");} }


0 commentaires

3 Réponses :


0
votes

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

Est-ce que cela se produit également sans les appels à l'API quota?


3 commentaires

Oui, les appels à l'API quota ont été mis en œuvre dans le seul but de trouver la cause fondamentale. La première raison de moi enquêter sur cette question était l'icônes d'avertissement de journal, en vous informant de mon application en utilisant plus d'une seconde de traitement sur un servlet donné.


Oui, peut-être simplement enregistrer l'heure, l'intérieur et l'extérieur avec et sans les appels au code du quota. Je serais très surpris si l'appel à req.getheader prend une seconde comme il est (en fonction de la mise en œuvre du conteneur), consultez une carte pré-initialisée.


@Geo: Que diriez-vous d'un servlet qui ne fait rien du tout?



0
votes

Vos journaux montrent que ce n'est que lent parfois.

La construction de votre objet de servlet est-elle vraiment lente?


1 commentaires

Bonjour Stephen, merci pour votre message. Je viens d'ajouter le code de servlet complet pour votre avantage. Ceci est un servlet unique, rien de l'extraordinaire.



4
votes

Il n'y a plus de quotas par minute sur le moteur d'application. Tous les messages qui se faisant référence sont obsolètes. Si vous souhaitez effectuer un meilleur profilage de votre utilisation de la CPU, vous voudrez peut-être essayer le nouvellement publié Appstats pour Java .


2 commentaires

Hey Nick, pourriez-vous s'il vous plaît envoyez-moi le communiqué officiel de Google Press où les quotas par minute sont supprimés?


Je ne crois pas que nous avons publié une sorte de communiqué de presse - si nous en avons publié un pour chaque nouvelle fonctionnalité, nous ne ferions jamais rien d'autre! C'est probablement dans les notes de libération, cependant.