dynamically get open file limits from OS

This commit is contained in:
Anthony Eufemio 2015-06-23 13:07:30 +08:00 committed by Anthony Eufemio
parent 3deded28a5
commit f1590801d4
5 changed files with 30 additions and 4 deletions

16
common/oslimits.go Normal file
View file

@ -0,0 +1,16 @@
// +build !windows
package common
import (
"syscall"
)
func MaxOpenFileLimit() int {
var nofile syscall.Rlimit
err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &nofile)
if err != nil {
return 1024
}
return int(nofile.Max)
}

View file

@ -0,0 +1,9 @@
package common
import (
)
func MaxOpenFileLimit() int {
// From https://msdn.microsoft.com/en-us/library/kdfaxaay.aspx
return 512
}

View file

@ -7,7 +7,6 @@ import (
"path/filepath"
"runtime"
"strings"
"github.com/kardianos/osext"
)

View file

@ -236,9 +236,9 @@ func New(config *Config) (*Ethereum, error) {
logger.NewJSONsystem(config.DataDir, config.LogJSON)
}
// Let the database take 3/4 of the max open files (TODO figure out a way to get the actual limit of the open files)
const dbCount = 3
ethdb.OpenFileLimit = 128 / (dbCount + 1)
ethdb.OpenFileLimit = common.MaxOpenFileLimit() / (dbCount + 1)
newdb := config.NewDB
if newdb == nil {

View file

@ -1,6 +1,7 @@
package ethdb
import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/compression/rle"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
@ -10,7 +11,8 @@ import (
"github.com/syndtr/goleveldb/leveldb/opt"
)
var OpenFileLimit = 64
var OpenFileLimit = common.MaxOpenFileLimit()
type LDBDatabase struct {
// filename for reporting