From 2d1a8d0da00bced1ef0e564c2378b393e48279a2 Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Thu, 19 Feb 2015 17:16:31 -0800 Subject: [PATCH] Allow ApplyOomScoreAdj to specify what PID to adjust for. --- pkg/kubelet/server/server.go | 2 +- pkg/proxy/server/server.go | 2 +- pkg/util/util.go | 18 ++++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index 727b003b950..866ddeb14b9 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -170,7 +170,7 @@ func (s *KubeletServer) Run(_ []string) error { s.EtcdServerList = util.StringList{} } - if err := util.ApplyOomScoreAdj(s.OOMScoreAdj); err != nil { + if err := util.ApplyOomScoreAdj(0, s.OOMScoreAdj); err != nil { glog.Info(err) } diff --git a/pkg/proxy/server/server.go b/pkg/proxy/server/server.go index 44eff45f390..55c11f69f5e 100644 --- a/pkg/proxy/server/server.go +++ b/pkg/proxy/server/server.go @@ -89,7 +89,7 @@ func (s *ProxyServer) AddFlags(fs *pflag.FlagSet) { // Run runs the specified ProxyServer. This should never exit. func (s *ProxyServer) Run(_ []string) error { - if err := util.ApplyOomScoreAdj(s.OOMScoreAdj); err != nil { + if err := util.ApplyOomScoreAdj(0, s.OOMScoreAdj); err != nil { glog.Info(err) } diff --git a/pkg/util/util.go b/pkg/util/util.go index d7e6a37dea2..579e9061324 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -175,14 +175,24 @@ func CompileRegexps(regexpStrings []string) ([]*regexp.Regexp, error) { return regexps, nil } -// Writes 'value' to /proc/self/oom_score_adj. -func ApplyOomScoreAdj(value int) error { +// Writes 'value' to /proc//oom_score_adj. PID = 0 means self +func ApplyOomScoreAdj(pid int, value int) error { if value < -1000 || value > 1000 { return fmt.Errorf("invalid value(%d) specified for oom_score_adj. Values must be within the range [-1000, 1000]", value) } + if pid < 0 { + return fmt.Errorf("invalid PID %d specified for oom_score_adj", pid) + } - if err := ioutil.WriteFile("/proc/self/oom_score_adj", []byte(strconv.Itoa(value)), 0700); err != nil { - fmt.Errorf("failed to set oom_score_adj to %d - %q", value, err) + var pidStr string + if pid == 0 { + pidStr = "self" + } else { + pidStr = strconv.Itoa(pid) + } + + if err := ioutil.WriteFile(path.Join("/proc", pidStr, "oom_score_adj"), []byte(strconv.Itoa(value)), 0700); err != nil { + fmt.Errorf("failed to set oom_score_adj to %d: %v", value, err) } return nil