OOM protected docker processes (-900)

pull/6/head
Dawn Chen 2015-05-14 14:40:20 -07:00
parent ecc3abdf83
commit ebbb130af8
3 changed files with 17 additions and 4 deletions

View File

@ -39,7 +39,8 @@ type containerManagerImpl struct {
dockerContainerName string
// The manager of the resource-only container Docker should be in.
manager fs.Manager
manager fs.Manager
dockerOomScoreAdj int
}
var _ containerManager = &containerManagerImpl{}
@ -55,6 +56,7 @@ func newContainerManager(dockerDaemonContainer string) (containerManager, error)
AllowAllDevices: true,
},
},
dockerOomScoreAdj: -900,
}, nil
}
@ -103,6 +105,11 @@ func (cm *containerManagerImpl) ensureDockerInContainer() error {
errs = append(errs, fmt.Errorf("failed to move PID %q (in %q) to %q", pid, cont, cm.dockerContainerName))
}
}
// Also apply oom_score_adj to processes
if err := util.ApplyOomScoreAdj(pid, cm.dockerOomScoreAdj); err != nil {
errs = append(errs, fmt.Errorf("failed to apply oom score %q to PID %q", cm.dockerOomScoreAdj, pid))
}
}
return errors.NewAggregate(errs)

View File

@ -1293,7 +1293,8 @@ func (dm *DockerManager) createPodInfraContainer(pod *api.Pod) (kubeletTypes.Doc
if containerInfo.State.Pid == 0 {
return "", fmt.Errorf("failed to get init PID for Docker pod infra container %q", string(id))
}
return id, util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
return id, nil
}
// TODO(vmarmol): This will soon be made non-public when its only use is internal.

View File

@ -214,8 +214,13 @@ func ApplyOomScoreAdj(pid int, value int) error {
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)
oom_value, err := ioutil.ReadFile(path.Join("/proc", pidStr, "oom_score_adj"))
if err != nil {
return fmt.Errorf("failed to read oom_score_adj: %v", err)
} else if string(oom_value) != strconv.Itoa(value) {
if err := ioutil.WriteFile(path.Join("/proc", pidStr, "oom_score_adj"), []byte(strconv.Itoa(value)), 0700); err != nil {
return fmt.Errorf("failed to set oom_score_adj to %d: %v", value, err)
}
}
return nil