From 25973db0c9c34fe363e416043033ca9cd081baf3 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 11 Dec 2015 14:33:48 -0800 Subject: [PATCH] Set higher rlimit for logs and pipes Signed-off-by: Michael Crosby --- containerd/main.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/containerd/main.go b/containerd/main.go index e910d2445..8c6ea8335 100644 --- a/containerd/main.go +++ b/containerd/main.go @@ -6,6 +6,7 @@ import ( "os" "runtime" "sync" + "syscall" "time" "google.golang.org/grpc" @@ -19,7 +20,10 @@ import ( "github.com/rcrowley/go-metrics" ) -const Usage = `High performance conatiner daemon` +const ( + Usage = `High performance conatiner daemon` + minRlimit = 1024 +) var authors = []cli.Author{ { @@ -65,7 +69,12 @@ func main() { app.Before = func(context *cli.Context) error { if context.GlobalBool("debug") { logrus.SetLevel(logrus.DebugLevel) - return debugMetrics(context.GlobalDuration("metrics-interval")) + if err := debugMetrics(context.GlobalDuration("metrics-interval")); err != nil { + return err + } + } + if err := checkLimits(); err != nil { + return err } return nil } @@ -83,6 +92,22 @@ func main() { } } +func checkLimits() error { + var l syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &l); err != nil { + return err + } + if l.Cur <= minRlimit { + logrus.WithFields(logrus.Fields{ + "current": l.Cur, + "max": l.Max, + }).Warn("low RLIMIT_NOFILE changing to max") + l.Cur = l.Max + return syscall.Setrlimit(syscall.RLIMIT_NOFILE, &l) + } + return nil +} + func debugMetrics(interval time.Duration) error { for name, m := range containerd.Metrics() { if err := metrics.DefaultRegistry.Register(name, m); err != nil {