Merge pull request #724 from crosbymichael/oom-score
Set oom score for containerd and shims
This commit is contained in:
commit
2565202183
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
31
sys/oom_unix.go
Normal 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
5
sys/oom_windows.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package sys
|
||||||
|
|
||||||
|
func SetOOMScore(pid, score int) error {
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user