Limit number of concurrent connections
Go's net/http library has no limits in place for number of concurrent requests currently being processed. This can result in an enormous number of goroutines being created and the read/write buffer pools growing unbounded resulting in OOM situations.
This commit is contained in:
parent
2b8dec07fe
commit
3f5b6b55b0
2 changed files with 5 additions and 0 deletions
|
@ -82,6 +82,7 @@ type Config struct {
|
|||
RequestTimeout Duration `json:"request_timeout"`
|
||||
HttpReadTimeout Duration `json:"http_read_timeout"`
|
||||
HttpWriteTimeout Duration `json:"http_write_timeout"`
|
||||
HttpListenLimit int `json:"http_listen_limit"`
|
||||
NumWantFallback int `json:"default_num_want"`
|
||||
|
||||
ClientWhitelistEnabled bool `json:"client_whitelist_enabled"`
|
||||
|
|
|
@ -117,10 +117,14 @@ func Serve(cfg *config.Config, tkr *tracker.Tracker) {
|
|||
}
|
||||
|
||||
glog.V(0).Info("Starting on ", cfg.Addr)
|
||||
if cfg.HttpListenLimit != 0 {
|
||||
glog.V(0).Info("Limiting connections to ", cfg.HttpListenLimit)
|
||||
}
|
||||
|
||||
grace := &graceful.Server{
|
||||
Timeout: cfg.RequestTimeout.Duration,
|
||||
ConnState: srv.connState,
|
||||
ListenLimit: cfg.HttpListenLimit,
|
||||
Server: &http.Server{
|
||||
Addr: cfg.Addr,
|
||||
Handler: newRouter(srv),
|
||||
|
|
Loading…
Reference in a new issue