首页 > 解决方案 > 为什么我在一个简单的 Go Web 服务上得到很大的 p95 响应时间?

问题描述

该服务只需读取查询参数并创建一个对象并将其返回给请求者。然而有时我会得到 200 毫秒的响应时间。感觉好像有些资源没有被正确清理或其他什么,但我什至不知道我应该去哪里找。

这是我尝试过的:

打开文件描述符设置:

/etc/sysctl.conf

# increase max open files
fs.file-max = 65536

/etc/security/limits.conf:

*               soft    nproc           65535
*               hard    nproc           65535
*               soft    nofile          65535
*               hard    nofile          65535

代码:

package main

import (
    "time"
    "net/http"
    "encoding/json"
    "github.com/gorilla/mux"
)

func main() {
    // router
    router := mux.NewRouter()

    // v1 router
    v1router := router.PathPrefix("/v1").Subrouter()
    v1router.HandleFunc("/resource", createResource).Methods("GET")

    // server config
    server := &http.Server{
        Addr:         ":8080",
        ReadTimeout:  time.Millisecond * 500,
        WriteTimeout: time.Millisecond * 100,
        IdleTimeout:  time.Millisecond * 500,
        Handler:      router,
    }

    server.SetKeepAlivesEnabled(false)

    // start server
    server.ListenAndServe()
}


type Resource struct {
    Id string
    Name string
}

func createResource(response http.ResponseWriter, request *http.Request) {
    // connection header
    response.Header().Set("Connection", "close")
    defer request.Body.Close()

    // get query params
    params := request.URL.Query()

    // create resource
    resource := Resource{
        Id: "testid",
        Name: params.Get("name"),
    }

    // convert resource to string
    resourceStr, _ := json.Marshal(resource)

    response.WriteHeader(http.StatusOK)
    _, _ = response.Write([]byte(resourceStr))
}

在此处输入图像描述

标签: goresponse

解决方案


推荐阅读