Merge pull request #36756 from gmarek/contention

Automatic merge from submit-queue

Add a flag allowing contention profiling of the API server

Useful for performance debugging.

cc @smarterclayton @timothysc @lavalamp

```release-note
Add a flag allowing contention profiling of the API server
```
This commit is contained in:
Kubernetes Submit Queue 2016-11-15 03:04:27 -08:00 committed by GitHub
commit b2cd67c31f
3 changed files with 16 additions and 4 deletions

View File

@ -105,6 +105,7 @@ container-port
container-runtime
container-runtime-endpoint
contain-pod-resources
contention-profiling
controller-start-interval
cors-allowed-origins
cpu-cfs-quota

View File

@ -24,6 +24,7 @@ import (
"os"
"path"
"regexp"
goruntime "runtime"
"sort"
"strconv"
"strings"
@ -80,6 +81,8 @@ type Config struct {
// allow downstream consumers to disable the index route
EnableIndex bool
EnableProfiling bool
// Requires generic profiling enabled
EnableContentionProfiling bool
EnableMetrics bool
EnableGarbageCollection bool
@ -285,6 +288,7 @@ func (c *Config) ApplyOptions(options *options.ServerRunOptions) *Config {
c.CorsAllowedOriginList = options.CorsAllowedOriginList
c.EnableGarbageCollection = options.EnableGarbageCollection
c.EnableProfiling = options.EnableProfiling
c.EnableContentionProfiling = options.EnableContentionProfiling
c.EnableSwaggerUI = options.EnableSwaggerUI
c.ExternalAddress = options.ExternalHost
c.MaxRequestsInFlight = options.MaxRequestsInFlight
@ -462,6 +466,9 @@ func (s *GenericAPIServer) installAPI(c *Config) {
}
if c.EnableProfiling {
routes.Profiling{}.Install(s.HandlerContainer)
if c.EnableContentionProfiling {
goruntime.SetBlockProfileRate(1)
}
}
if c.EnableMetrics {
if c.EnableProfiling {

View File

@ -83,6 +83,7 @@ type ServerRunOptions struct {
AuditLogMaxSize int
EnableGarbageCollection bool
EnableProfiling bool
EnableContentionProfiling bool
EnableSwaggerUI bool
EnableWatchCache bool
EtcdServersOverrides []string
@ -139,6 +140,7 @@ func NewServerRunOptions() *ServerRunOptions {
DeleteCollectionWorkers: 1,
EnableGarbageCollection: true,
EnableProfiling: true,
EnableContentionProfiling: false,
EnableWatchCache: true,
InsecureBindAddress: net.ParseIP("127.0.0.1"),
InsecurePort: 8080,
@ -347,6 +349,8 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) {
fs.BoolVar(&s.EnableProfiling, "profiling", s.EnableProfiling,
"Enable profiling via web interface host:port/debug/pprof/")
fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", s.EnableContentionProfiling,
"Enable contention profiling. Requires --profiling to be set to work.")
fs.BoolVar(&s.EnableSwaggerUI, "enable-swagger-ui", s.EnableSwaggerUI,
"Enables swagger ui on the apiserver at /swagger-ui")