提交 48ee44c4 作者: Jeromy

try to raise ulimit if its too low

License: MIT
Signed-off-by: 's avatarJeromy <jeromyj@gmail.com>
上级 ae3fed72
......@@ -152,10 +152,16 @@ func defaultMux(path string) corehttp.ServeOption {
}
}
var fileDescriptorCheck = func() error { return nil }
func daemonFunc(req cmds.Request, res cmds.Response) {
// let the user know we're going.
fmt.Printf("Initializing daemon...\n")
if err := fileDescriptorCheck(); err != nil {
log.Error("setting file descriptor limit: %s", err)
}
ctx := req.InvocContext()
go func() {
......
// +build linux darwin
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.Error("bad value for IPFS_FD_MAX: %s", err)
} else {
ipfsFileDescNum = uint64(n)
}
}
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)
}
if rLimit.Cur < ipfsFileDescNum {
if rLimit.Max > ipfsFileDescNum {
fmt.Printf("Adjusting current ulimit to %d.\n", rLimit.Max)
rLimit.Cur = rLimit.Max
} else {
fmt.Printf("Adjusting current and maximum ulimit to %d.\n", ipfsFileDescNum)
rLimit.Cur = ipfsFileDescNum
rLimit.Max = ipfsFileDescNum
}
}
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
if err != nil {
return fmt.Errorf("error setting ulimit: %s", err)
}
return nil
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论