Merge pull request #724 from crosbymichael/oom-score

Set oom score for containerd and shims
This commit is contained in:
Phil Estes 2017-04-12 15:41:23 -04:00 committed by GitHub
commit 2565202183
5 changed files with 47 additions and 0 deletions

View File

@ -53,6 +53,8 @@ type config struct {
Plugins map[string]toml.Primitive `toml:"plugins"` Plugins map[string]toml.Primitive `toml:"plugins"`
// Enable containerd as a subreaper // Enable containerd as a subreaper
Subreaper bool `toml:"subreaper"` Subreaper bool `toml:"subreaper"`
// OOMScore adjust the containerd's oom score
OOMScore int `toml:"oom_score"`
md toml.MetaData md toml.MetaData
} }

View File

@ -29,6 +29,12 @@ func platformInit(context *cli.Context) error {
return err return err
} }
} }
if conf.OOMScore != 0 {
log.G(global).Infof("changing OOM score to %d", conf.OOMScore)
if err := sys.SetOOMScore(os.Getpid(), conf.OOMScore); err != nil {
return err
}
}
return nil return nil
} }

View File

@ -51,6 +51,9 @@ func newShim(path string, remote bool) (shim.ShimClient, error) {
if err := reaper.Default.Start(cmd); err != nil { if err := reaper.Default.Start(cmd); err != nil {
return nil, errors.Wrapf(err, "failed to start shim") return nil, errors.Wrapf(err, "failed to start shim")
} }
if err := sys.SetOOMScore(cmd.Process.Pid, sys.OOMScoreMaxKillable); err != nil {
return nil, err
}
return connectShim(socket) return connectShim(socket)
} }

31
sys/oom_unix.go Normal file
View File

@ -0,0 +1,31 @@
// +build !windows
package sys
import (
"fmt"
"os"
"strconv"
"github.com/opencontainers/runc/libcontainer/system"
)
// OOMScoreMaxKillable is the maximum score keeping the process killable by the oom killer
const OOMScoreMaxKillable = -999
// SetOOMScore sets the oom score for the provided pid
func SetOOMScore(pid, score int) error {
path := fmt.Sprintf("/proc/%d/oom_score_adj", pid)
f, err := os.OpenFile(path, os.O_WRONLY, 0)
if err != nil {
return err
}
defer f.Close()
if _, err = f.WriteString(strconv.Itoa(score)); err != nil {
if os.IsPermission(err) && system.RunningInUserNS() {
return nil
}
return err
}
return nil
}

5
sys/oom_windows.go Normal file
View File

@ -0,0 +1,5 @@
package sys
func SetOOMScore(pid, score int) error {
return nil
}