Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine “理解”;运行时mcycles“;及;cpu“ms”;AppEngine和x27会计;s Go运行时_Google App Engine_Go - Fatal编程技术网

Google app engine “理解”;运行时mcycles“;及;cpu“ms”;AppEngine和x27会计;s Go运行时

Google app engine “理解”;运行时mcycles“;及;cpu“ms”;AppEngine和x27会计;s Go运行时,google-app-engine,go,Google App Engine,Go,我有一个Go/AppEngine应用程序,我正试图对其进行微调,以优化并发请求,这是目前cpu受限的。在这样做的过程中,我看到日志中的cpu_ms和仪表板中的average runtime mcycles的异常值 我有几个不同的端点,它们的cpu使用似乎与实际情况完全不符,但有一个特别突出。这是一个简单的处理程序,大致如下所示: func ThangHandler(w http.ResponseWriter, r *http.Request) { ctx := appen

我有一个Go/AppEngine应用程序,我正试图对其进行微调,以优化并发请求,这是目前cpu受限的。在这样做的过程中,我看到日志中的
cpu_ms
和仪表板中的
average runtime mcycles
的异常值

我有几个不同的端点,它们的cpu使用似乎与实际情况完全不符,但有一个特别突出。这是一个简单的处理程序,大致如下所示:

    func ThangHandler(w http.ResponseWriter, r *http.Request) {
        ctx := appengine.NewContext(r)

        var orgId string
        cookie, err := r.Cookie(orgCookieKey)
        if err != nil || cookie.Value == "" {
            // Check URL params as a fallback.
            r.ParseForm()
            orgId = r.Form.Get("orgId")
            if orgId == "" {
                util.HttpError(ctx, w, http.StatusForbidden)
                return
            }
        } else {
            orgId = cookie.Value
        }

        w.Header().Set("Content-Type", "application/json; charset=utf-8")
        fmt.Fprintf(w, simpleTemplate, orgId, r.Host, "true", host)
    }
这段代码的细节并不重要,因为它除了读取cookie/param并在一个非常简单的模板字符串(可能是100个字符左右)上运行Printf之外,没有做更多的事情

在我写这篇文章时,AppEngine仪表板报告该端点在过去一个小时内消耗了
83个运行时mcycles
平均值,这似乎高得出奇。当我查看与这些请求相关的前20个日志条目时,我看到了一幅更奇怪的图片。大多数是
ms=13cpu\u ms=0
ms=13cpu\u ms=21
(我假设那里进行了一些量化)。但是大约有10%是非常奇怪的,例如
ms=148cpu\u ms=238

所以我的实际问题是:

  • 这么简单的一个端点怎么可能消耗83个平均mcycles,并且具有如此高的方差?
    • 我应该怀疑GC暂停吗
  • 日志中怎么可能出现
    cpu\u ms>ms

为了让将来遇到这个问题的人受益,下面是谷歌appengine go邮件列表上的dsymonds给出的答案:

cpu_m和相关会计计量是来自 旧的计费结构,至少部分基于CPU 消费。现在,从这个角度来看,这是毫无意义的,我 如果这些数字有点荒谬,也不会感到惊讶

Go运行时中没有任何将CPU时间归因于 单独的请求,在并发的情况下这样做也不是很容易处理的 运行时。归因是统计性质的,这可以解释 因为你看到的奇怪