server_linux.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package server
  2. import (
  3. "context"
  4. "os"
  5. "github.com/containerd/cgroups"
  6. "github.com/containerd/containerd/log"
  7. "github.com/containerd/containerd/sys"
  8. specs "github.com/opencontainers/runtime-spec/specs-go"
  9. )
  10. // apply sets config settings on the server process
  11. func apply(ctx context.Context, config *Config) error {
  12. if !config.NoSubreaper {
  13. log.G(ctx).Info("setting subreaper...")
  14. if err := sys.SetSubreaper(1); err != nil {
  15. return err
  16. }
  17. }
  18. if config.OOMScore != 0 {
  19. log.G(ctx).Debugf("changing OOM score to %d", config.OOMScore)
  20. if err := sys.SetOOMScore(os.Getpid(), config.OOMScore); err != nil {
  21. log.G(ctx).WithError(err).Errorf("failed to change OOM score to %d", config.OOMScore)
  22. }
  23. }
  24. if config.Cgroup.Path != "" {
  25. cg, err := cgroups.Load(cgroups.V1, cgroups.StaticPath(config.Cgroup.Path))
  26. if err != nil {
  27. if err != cgroups.ErrCgroupDeleted {
  28. return err
  29. }
  30. if cg, err = cgroups.New(cgroups.V1, cgroups.StaticPath(config.Cgroup.Path), &specs.LinuxResources{}); err != nil {
  31. return err
  32. }
  33. }
  34. if err := cg.Add(cgroups.Process{
  35. Pid: os.Getpid(),
  36. }); err != nil {
  37. return err
  38. }
  39. }
  40. return nil
  41. }