Frage

Ein sehr einfacher Java-Code in einem doGet () Servlet wird immer mehr als eine Sekunde von CPU-Zeit auf GAE. Ich habe einige Quote zugehörige Dokumentation gelesen und anscheinend bin ich nicht etwas falsch zu machen.

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

Ich wollte wissen, was die CPU wurde mit den meisten habe ich eine Google-Hilfe Empfehlung verwenden.

    //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);

Das einzige, was der Code über mich erzählt, dass die Header-Inspektion wird verwenden mehr als eine Sekunde (1000 ms) der CPU-Zeit, die für Google eine Warnung auf der Log-Platte ist. Das scheint eine sehr einfache Anfrage zu sein und immer noch mehr als eine Sekunde von CPU verwendet.

Was mir fehlt?


Unter dem Bild der Protokolle für jede Unterhaltung. Protokolle für den Google App Engine langsam Report

Ich bin den vollständigen Code, zum Nutzen aller veröffentlichen.

@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");} }
War es hilfreich?

Lösung

Es gibt nicht mehr pro Minute Quoten für App Engine. Alle Nachrichten, die sich auf sie veraltet sind. Wenn Sie besser tun wollen Ihre CPU-Auslastung Profilieren, können Sie das neu veröffentlichten Appstats für Java .

Andere Tipps

Ihre Protokolle zeigen, dass es nur langsam manchmal ist.

Ist der Bau Ihres Servlet-Objekt wirklich langsam?

  

Das einzige, was der Code über mich erzählt, dass die Header-Inspektion wird verwenden mehr als eine Sekunde (1000 ms) der CPU-Zeit, die für Google eine Warnung auf der Log-Platte ist. Das scheint eine sehr einfache Anfrage zu sein und immer noch mehr als eine Sekunde von CPU verwendet wird.

Gilt das auch ohne die Anrufe an die Quote API geschehen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top