etcdserver: support zap.Logger in FD monitoring routine

Keep replacing capnslog

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
Gyuho Lee
2018-07-20 14:59:03 -07:00
parent 98f54ec3f5
commit 57ec2226cc
2 changed files with 18 additions and 5 deletions

View File

@@ -21,6 +21,7 @@ import (
"github.com/coreos/etcd/version"
"github.com/prometheus/client_golang/prometheus"
"go.uber.org/zap"
)
var (
@@ -125,22 +126,34 @@ func init() {
}).Set(1)
}
func monitorFileDescriptor(done <-chan struct{}) {
func monitorFileDescriptor(lg *zap.Logger, done <-chan struct{}) {
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
for {
used, err := runtime.FDUsage()
if err != nil {
plog.Errorf("cannot monitor file descriptor usage (%v)", err)
if lg != nil {
lg.Warn("failed to get file descriptor usage", zap.Error(err))
} else {
plog.Errorf("cannot monitor file descriptor usage (%v)", err)
}
return
}
limit, err := runtime.FDLimit()
if err != nil {
plog.Errorf("cannot monitor file descriptor usage (%v)", err)
if lg != nil {
lg.Warn("failed to get file descriptor limit", zap.Error(err))
} else {
plog.Errorf("cannot monitor file descriptor usage (%v)", err)
}
return
}
if used >= limit/5*4 {
plog.Warningf("80%% of the file descriptor limit is used [used = %d, limit = %d]", used, limit)
if lg != nil {
lg.Warn("80%% of file descriptors are used", zap.Uint64("used", used), zap.Uint64("limit", limit))
} else {
plog.Warningf("80%% of the file descriptor limit is used [used = %d, limit = %d]", used, limit)
}
}
select {
case <-ticker.C:

View File

@@ -703,7 +703,7 @@ func (s *EtcdServer) Start() {
s.goAttach(func() { s.adjustTicks() })
s.goAttach(func() { s.publish(s.Cfg.ReqTimeout()) })
s.goAttach(s.purgeFile)
s.goAttach(func() { monitorFileDescriptor(s.stopping) })
s.goAttach(func() { monitorFileDescriptor(s.getLogger(), s.stopping) })
s.goAttach(s.monitorVersions)
s.goAttach(s.linearizableReadLoop)
s.goAttach(s.monitorKVHash)