The service simply reads query params and creates an object and returns it to the requester. Yet at times I'm getting 200ms response times. It feels like there's some resource that's not being cleaned up correctly or something, but I don't even know where I should be looking.
Here's what I've tried:
Connection
header to close. Same reasons.Open File Descriptor Settings:
/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
Code:
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))
}