mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdserver: support zap.Logger in FD monitoring routine
Keep replacing capnslog Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user