ulimit: handle freebsd ulimit code separately from the rest of the unixes
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Nov 30, 2016 at 10:27 UTC
1cd7e58c80052db575cce67d7774bfb67b5097a4
3 files changed
+64
-13
cmd/ipfs/ulimit.go
new
+19
@@ -0,0 +1,19 @@
1
+package main
2
+
3
+import (
4
+ "os"
5
+ "strconv"
6
+)
7
+
8
+var ipfsFileDescNum = uint64(1024)
9
+
10
+func init() {
11
+ if val := os.Getenv("IPFS_FD_MAX"); val != "" {
12
+ n, err := strconv.Atoi(val)
13
+ if err != nil {
14
+ log.Errorf("bad value for IPFS_FD_MAX: %s", err)
15
+ } else {
16
+ ipfsFileDescNum = uint64(n)
17
+ }
18
+ }
19
+}
cmd/ipfs/ulimit_freebsd.go
new
+44
@@ -0,0 +1,44 @@
1
+// +build freebsd
2
+
3
+package main
4
+
5
+import (
6
+ "fmt"
7
+ "syscall"
8
+)
9
+
10
+func init() {
11
+ fileDescriptorCheck = checkAndSetUlimit
12
+}
13
+
14
+func checkAndSetUlimit() error {
15
+ var rLimit syscall.Rlimit
16
+ err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
17
+ if err != nil {
18
+ return fmt.Errorf("error getting rlimit: %s", err)
19
+ }
20
+
21
+ ipfsFileDescNum := int64(ipfsFileDescNum)
22
+
23
+ var setting bool
24
+ if rLimit.Cur < ipfsFileDescNum {
25
+ if rLimit.Max < ipfsFileDescNum {
26
+ log.Error("adjusting max")
27
+ rLimit.Max = ipfsFileDescNum
28
+ }
29
+ fmt.Printf("Adjusting current ulimit to %d...\n", ipfsFileDescNum)
30
+ rLimit.Cur = ipfsFileDescNum
31
+ setting = true
32
+ }
33
+
34
+ err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
35
+ if err != nil {
36
+ return fmt.Errorf("error setting ulimit: %s", err)
37
+ }
38
+
39
+ if setting {
40
+ fmt.Printf("Successfully raised file descriptor limit to %d.\n", ipfsFileDescNum)
41
+ }
42
+
43
+ return nil
44
+}
cmd/ipfs/ulimit_unix.go
+1
-13
@@ -1,25 +1,13 @@
1
-// +build darwin freebsd linux netbsd openbsd
1
+// +build darwin linux netbsd openbsd
2
3
package main
4
5
import (
6
"fmt"
7
- "os"
8
- "strconv"
7
"syscall"
8
)
9
12
-var ipfsFileDescNum = uint64(1024)
13
-
10
func init() {
15
- if val := os.Getenv("IPFS_FD_MAX"); val != "" {
16
- n, err := strconv.Atoi(val)
17
- if err != nil {
18
- log.Errorf("bad value for IPFS_FD_MAX: %s", err)
19
- } else {
20
- ipfsFileDescNum = uint64(n)
21
- }
22
- }
11
fileDescriptorCheck = checkAndSetUlimit
12
}
13