@cryptotaxi247 / kubo / commits / 48ee44c46

try to raise ulimit if its too low

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Mar 14, 2016 at 17:10 UTC 48ee44c46a0abbc42f40b2637fa75ceb6b090a40
2 files changed +56
cmd/ipfs/daemon.go
+6
@@ -152,10 +152,16 @@ func defaultMux(path string) corehttp.ServeOption {
152 }
153 }
154
155 +var fileDescriptorCheck = func() error { return nil }
156 +
157 func daemonFunc(req cmds.Request, res cmds.Response) {
158 // let the user know we're going.
159 fmt.Printf("Initializing daemon...\n")
160
161 + if err := fileDescriptorCheck(); err != nil {
162 + log.Error("setting file descriptor limit: %s", err)
163 + }
164 +
165 ctx := req.InvocContext()
166
167 go func() {
cmd/ipfs/ulimit_unix.go new
+50
@@ -0,0 +1,50 @@
1 +// +build linux darwin
2 +
3 +package main
4 +
5 +import (
6 + "fmt"
7 + "os"
8 + "strconv"
9 + "syscall"
10 +)
11 +
12 +var ipfsFileDescNum = uint64(1024)
13 +
14 +func init() {
15 + if val := os.Getenv("IPFS_FD_MAX"); val != "" {
16 + n, err := strconv.Atoi(val)
17 + if err != nil {
18 + log.Error("bad value for IPFS_FD_MAX: %s", err)
19 + } else {
20 + ipfsFileDescNum = uint64(n)
21 + }
22 + }
23 + fileDescriptorCheck = checkAndSetUlimit
24 +}
25 +
26 +func checkAndSetUlimit() error {
27 + var rLimit syscall.Rlimit
28 + err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
29 + if err != nil {
30 + return fmt.Errorf("error getting rlimit: %s", err)
31 + }
32 +
33 + if rLimit.Cur < ipfsFileDescNum {
34 + if rLimit.Max > ipfsFileDescNum {
35 + fmt.Printf("Adjusting current ulimit to %d.\n", rLimit.Max)
36 + rLimit.Cur = rLimit.Max
37 + } else {
38 + fmt.Printf("Adjusting current and maximum ulimit to %d.\n", ipfsFileDescNum)
39 + rLimit.Cur = ipfsFileDescNum
40 + rLimit.Max = ipfsFileDescNum
41 + }
42 + }
43 +
44 + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
45 + if err != nil {
46 + return fmt.Errorf("error setting ulimit: %s", err)
47 + }
48 +
49 + return nil
50 +}