From adc7c1b7b6ec9662ca4c42c4aadb26adeb331b42 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Fri, 22 Jun 2018 09:30:27 +0300 Subject: [PATCH] Setup rlimits for application --- main.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index cf3d140..f727e99 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "io" "math/rand" "os" + "syscall" "time" "go.uber.org/zap" @@ -15,6 +16,7 @@ import ( "github.com/9seconds/mtg/config" "github.com/9seconds/mtg/proxy" + "github.com/juju/errors" ) var ( @@ -81,12 +83,20 @@ var ( secret = app.Arg("secret", "Secret of this proxy.").Required().String() ) -func main() { +func init() { rand.Seed(time.Now().UTC().UnixNano()) - app.Version(version) + +} + +func main() { kingpin.MustParse(app.Parse(os.Args[1:])) + err := setRLimit() + if err != nil { + usage(err.Error()) + } + conf, err := config.NewConfig(*debug, *verbose, *bindIP, *bindPort, *publicIPv4, *publicIPv4Port, @@ -125,6 +135,23 @@ func main() { } } +func setRLimit() (err error) { + rLimit := syscall.Rlimit{} + err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + err = errors.Annotate(err, "Cannot get rlimit") + return + } + rLimit.Cur = rLimit.Max + + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + err = errors.Annotate(err, "Cannot set rlimit") + } + + return +} + func printURLs(data interface{}) { encoder := json.NewEncoder(os.Stdout) encoder.SetEscapeHTML(false)