diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-04 18:51:16 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-04 18:51:16 +0800 |
commit | b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1 (patch) | |
tree | 00ab530e6f28230400a65ebae7a4610f94cc1f80 /fdtrack/fdusage_linux.go | |
parent | ff66e8fa2935d59d5104e324861d9e1bb517ffaa (diff) | |
parent | 5c949d3b3ba81ea0563575b19a7b148aeac4bf61 (diff) | |
download | dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar.gz dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar.bz2 dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar.lz dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar.xz dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.tar.zst dexon-b01f2c29ae48dba0ba4a90a4c6dbbadfc313f5b1.zip |
Merge pull request #1574 from fjl/fdtrack
fdtrack: hack to track file descriptor usage
Diffstat (limited to 'fdtrack/fdusage_linux.go')
-rw-r--r-- | fdtrack/fdusage_linux.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/fdtrack/fdusage_linux.go b/fdtrack/fdusage_linux.go new file mode 100644 index 000000000..d9a856a0c --- /dev/null +++ b/fdtrack/fdusage_linux.go @@ -0,0 +1,53 @@ +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +// +build linux + +package fdtrack + +import ( + "io" + "os" + "syscall" +) + +func fdlimit() int { + var nofile syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &nofile); err != nil { + return 0 + } + return int(nofile.Cur) +} + +func fdusage() (int, error) { + f, err := os.Open("/proc/self/fd") + if err != nil { + return 0, err + } + defer f.Close() + const batchSize = 100 + n := 0 + for { + list, err := f.Readdirnames(batchSize) + n += len(list) + if err == io.EOF { + break + } else if err != nil { + return 0, err + } + } + return n, nil +} |