github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/common/fdlimit/fdlimit_unix.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:33</date> 10 //</624450073417224192> 11 12 13 //+构建Linux Darwin Netbsd Openbsd Solaris 14 15 package fdlimit 16 17 import "syscall" 18 19 //raise尝试最大化此进程的文件描述符允许量 20 //达到操作系统允许的最大硬限制。 21 func Raise(max uint64) error { 22 //获取当前限制 23 var limit syscall.Rlimit 24 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 25 return err 26 } 27 //尝试将限额更新为最大限额 28 limit.Cur = limit.Max 29 if limit.Cur > max { 30 limit.Cur = max 31 } 32 if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 33 return err 34 } 35 return nil 36 } 37 38 //当前检索允许由此打开的文件描述符数 39 //过程。 40 func Current() (int, error) { 41 var limit syscall.Rlimit 42 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 43 return 0, err 44 } 45 return int(limit.Cur), nil 46 } 47 48 //最大检索此进程的最大文件描述符数 49 //允许自己请求。 50 func Maximum() (int, error) { 51 var limit syscall.Rlimit 52 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 53 return 0, err 54 } 55 return int(limit.Max), nil 56 } 57