diff --git a/cmd/ipfs/ulimit.go b/cmd/ipfs/ulimit.go new file mode 100644 index 000000000..fa517f1ea --- /dev/null +++ b/cmd/ipfs/ulimit.go @@ -0,0 +1,19 @@ +package main + +import ( + "os" + "strconv" +) + +var ipfsFileDescNum = uint64(1024) + +func init() { + if val := os.Getenv("IPFS_FD_MAX"); val != "" { + n, err := strconv.Atoi(val) + if err != nil { + log.Errorf("bad value for IPFS_FD_MAX: %s", err) + } else { + ipfsFileDescNum = uint64(n) + } + } +} diff --git a/cmd/ipfs/ulimit_freebsd.go b/cmd/ipfs/ulimit_freebsd.go new file mode 100644 index 000000000..d80114772 --- /dev/null +++ b/cmd/ipfs/ulimit_freebsd.go @@ -0,0 +1,44 @@ +// +build freebsd + +package main + +import ( + "fmt" + "syscall" +) + +func init() { + fileDescriptorCheck = checkAndSetUlimit +} + +func checkAndSetUlimit() error { + var rLimit syscall.Rlimit + err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + return fmt.Errorf("error getting rlimit: %s", err) + } + + ipfsFileDescNum := int64(ipfsFileDescNum) + + var setting bool + if rLimit.Cur < ipfsFileDescNum { + if rLimit.Max < ipfsFileDescNum { + log.Error("adjusting max") + rLimit.Max = ipfsFileDescNum + } + fmt.Printf("Adjusting current ulimit to %d...\n", ipfsFileDescNum) + rLimit.Cur = ipfsFileDescNum + setting = true + } + + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + return fmt.Errorf("error setting ulimit: %s", err) + } + + if setting { + fmt.Printf("Successfully raised file descriptor limit to %d.\n", ipfsFileDescNum) + } + + return nil +} diff --git a/cmd/ipfs/ulimit_unix.go b/cmd/ipfs/ulimit_unix.go index 63d0b0136..be4c5e265 100644 --- a/cmd/ipfs/ulimit_unix.go +++ b/cmd/ipfs/ulimit_unix.go @@ -1,25 +1,13 @@ -// +build darwin freebsd linux netbsd openbsd +// +build darwin linux netbsd openbsd package main import ( "fmt" - "os" - "strconv" "syscall" ) -var ipfsFileDescNum = uint64(1024) - func init() { - if val := os.Getenv("IPFS_FD_MAX"); val != "" { - n, err := strconv.Atoi(val) - if err != nil { - log.Errorf("bad value for IPFS_FD_MAX: %s", err) - } else { - ipfsFileDescNum = uint64(n) - } - } fileDescriptorCheck = checkAndSetUlimit }