Преглед изворни кода

Setup rlimits for application

tags/0.9
9seconds пре 7 година
родитељ
комит
adc7c1b7b6
1 измењених фајлова са 29 додато и 2 уклоњено
  1. 29
    2
      main.go

+ 29
- 2
main.go Прегледај датотеку

7
 	"io"
7
 	"io"
8
 	"math/rand"
8
 	"math/rand"
9
 	"os"
9
 	"os"
10
+	"syscall"
10
 	"time"
11
 	"time"
11
 
12
 
12
 	"go.uber.org/zap"
13
 	"go.uber.org/zap"
15
 
16
 
16
 	"github.com/9seconds/mtg/config"
17
 	"github.com/9seconds/mtg/config"
17
 	"github.com/9seconds/mtg/proxy"
18
 	"github.com/9seconds/mtg/proxy"
19
+	"github.com/juju/errors"
18
 )
20
 )
19
 
21
 
20
 var (
22
 var (
81
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
83
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
82
 )
84
 )
83
 
85
 
84
-func main() {
86
+func init() {
85
 	rand.Seed(time.Now().UTC().UnixNano())
87
 	rand.Seed(time.Now().UTC().UnixNano())
86
-
87
 	app.Version(version)
88
 	app.Version(version)
89
+
90
+}
91
+
92
+func main() {
88
 	kingpin.MustParse(app.Parse(os.Args[1:]))
93
 	kingpin.MustParse(app.Parse(os.Args[1:]))
89
 
94
 
95
+	err := setRLimit()
96
+	if err != nil {
97
+		usage(err.Error())
98
+	}
99
+
90
 	conf, err := config.NewConfig(*debug, *verbose,
100
 	conf, err := config.NewConfig(*debug, *verbose,
91
 		*bindIP, *bindPort,
101
 		*bindIP, *bindPort,
92
 		*publicIPv4, *publicIPv4Port,
102
 		*publicIPv4, *publicIPv4Port,
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
 func printURLs(data interface{}) {
155
 func printURLs(data interface{}) {
129
 	encoder := json.NewEncoder(os.Stdout)
156
 	encoder := json.NewEncoder(os.Stdout)
130
 	encoder.SetEscapeHTML(false)
157
 	encoder.SetEscapeHTML(false)

Loading…
Откажи
Сачувај