Improve nginx performance to match listen backlog with net.core.somaxconn

This commit is contained in:
Manuel de Brito Fontes 2016-07-11 23:04:21 -04:00
parent ba964cdcda
commit 8b25cc67a5
3 changed files with 14 additions and 1 deletions

View file

@ -276,7 +276,7 @@ http {
# default server, including healthcheck # default server, including healthcheck
server { server {
listen 8080 default_server reuseport; listen 8080 default_server reuseport backlog={{ .backlogSize }};
location /healthz { location /healthz {
access_log off; access_log off;

View file

@ -61,6 +61,7 @@ func (ngx *Manager) loadTemplate() {
func (ngx *Manager) writeCfg(cfg config.Configuration, ingressCfg IngressConfig) (bool, error) { func (ngx *Manager) writeCfg(cfg config.Configuration, ingressCfg IngressConfig) (bool, error) {
conf := make(map[string]interface{}) conf := make(map[string]interface{})
conf["backlogSize"] = sysctlSomaxconn()
conf["upstreams"] = ingressCfg.Upstreams conf["upstreams"] = ingressCfg.Upstreams
conf["servers"] = ingressCfg.Servers conf["servers"] = ingressCfg.Servers
conf["tcpUpstreams"] = ingressCfg.TCPUpstreams conf["tcpUpstreams"] = ingressCfg.TCPUpstreams

View file

@ -28,6 +28,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/util/sysctl"
"k8s.io/contrib/ingress/controllers/nginx/nginx/config" "k8s.io/contrib/ingress/controllers/nginx/nginx/config"
) )
@ -220,3 +221,14 @@ func diff(b1, b2 []byte) (data []byte, err error) {
} }
return return
} }
// sysctlSomaxconn returns the value of net.core.somaxconn, i.e.
// maximum number of connections that can be queued for acceptance
func sysctlSomaxconn() int {
maxConns, err := sysctl.GetSysctl("net.core.somaxconn")
if err != nil || maxConns < 512 {
return 511
}
return maxConns
}