Просмотр исходного кода

Setup rlimits for application

tags/0.9
9seconds 7 лет назад
Родитель
Сommit
adc7c1b7b6
1 измененных файлов: 29 добавлений и 2 удалений
  1. 29
    2
      main.go

+ 29
- 2
main.go Просмотреть файл

@@ -7,6 +7,7 @@ import (
7 7
 	"io"
8 8
 	"math/rand"
9 9
 	"os"
10
+	"syscall"
10 11
 	"time"
11 12
 
12 13
 	"go.uber.org/zap"
@@ -15,6 +16,7 @@ import (
15 16
 
16 17
 	"github.com/9seconds/mtg/config"
17 18
 	"github.com/9seconds/mtg/proxy"
19
+	"github.com/juju/errors"
18 20
 )
19 21
 
20 22
 var (
@@ -81,12 +83,20 @@ var (
81 83
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
82 84
 )
83 85
 
84
-func main() {
86
+func init() {
85 87
 	rand.Seed(time.Now().UTC().UnixNano())
86
-
87 88
 	app.Version(version)
89
+
90
+}
91
+
92
+func main() {
88 93
 	kingpin.MustParse(app.Parse(os.Args[1:]))
89 94
 
95
+	err := setRLimit()
96
+	if err != nil {
97
+		usage(err.Error())
98
+	}
99
+
90 100
 	conf, err := config.NewConfig(*debug, *verbose,
91 101
 		*bindIP, *bindPort,
92 102
 		*publicIPv4, *publicIPv4Port,
@@ -125,6 +135,23 @@ func main() {
125 135
 	}
126 136
 }
127 137
 
138
+func setRLimit() (err error) {
139
+	rLimit := syscall.Rlimit{}
140
+	err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
141
+	if err != nil {
142
+		err = errors.Annotate(err, "Cannot get rlimit")
143
+		return
144
+	}
145
+	rLimit.Cur = rLimit.Max
146
+
147
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
148
+	if err != nil {
149
+		err = errors.Annotate(err, "Cannot set rlimit")
150
+	}
151
+
152
+	return
153
+}
154
+
128 155
 func printURLs(data interface{}) {
129 156
 	encoder := json.NewEncoder(os.Stdout)
130 157
 	encoder.SetEscapeHTML(false)

Загрузка…
Отмена
Сохранить