去记录文件,当写入时出现死锁?

问题描述 投票:0回答:1

使用 zap 或 logrus 记录写入文件,总是在多 goroutine 中导致这个:pls

goroutine 6 \[semacquire, 11 minutes\]:
internal/poll.runtime_Semacquire(0xc000096840?)
/root/gows/go/src/runtime/sema.go:67 +0x27
internal/poll.(\*fdMutex).rwlock(0xc0000960c0, 0x0?)
/root/gows/go/src/internal/poll/fd_mutex.go:154 +0xd2
internal/poll.(\*FD).writeLock(...)
/root/gows/go/src/internal/poll/fd_mutex.go:239
internal/poll.(\*FD).Write(0xc0000960c0, {0xc0000c2800, 0x71, 0x400})
/root/gows/go/src/internal/poll/fd_unix.go:370 +0x72
os.(\*File).write(...)
/root/gows/go/src/os/file_posix.go:48
os.(\*File).Write(0xc000014018, {0xc0000c2800?, 0x71, 0x0?})
/root/gows/go/src/os/file.go:175 +0x65
go.uber.org/zap/zapcore.multiWriteSyncer.Write({0xc000088860?, 0x2, 0xd57aa0?}, {0xc0000c2800, 0x71, 0x400})
/root/go/pkg/mod/go.uber.org/[email protected]/zapcore/write_syncer.go:105 +0xae
go.uber.org/zap/zapcore.(\*ioCore).Write(0xc0001b0510, {0x0, {0xc0f9947d6b131bac, 0x98a9a112d2, 0xdaffa0}, {0x0, 0x0}, {0xc0005e4f00, 0x20}, {0x1, ...}, ...}, ...)
/root/go/pkg/mod/go.uber.org/[email protected]/zapcore/core.go:90 +0xb5
go.uber.org/zap/zapcore.(\*CheckedEntry).Write(0xc0003100c0, {0x0, 0x0, 0x0})
/root/go/pkg/mod/go.uber.org/[email protected]/zapcore/entry.go:220 +0x1d9
go.uber.org/zap.(\*SugaredLogger).log(0xc000014128, 0x0, {0x9b4487?, 0x11?}, {0xc000076f68?, 0x1?, 0x1?}, {0x0, 0x0, 0x0})
/root/go/pkg/mod/go.uber.org/[email protected]/sugar.go:227 +0xee
go.uber.org/zap.(\*SugaredLogger).Infof(0xc0005d8ba0?, {0x9b4487?, 0x0?}, {0xc000076f68?, 0x0?, 0x0?})
/root/go/pkg/mod/go.uber.org/[email protected]/sugar.go:138 +0x45

your text
这是什么原因?是错误使用还是框架错误?

go logging deadlock logrus
1个回答
0
投票

也许你在两个 goroutinue 或进程中写了一个文件,所以他们都在等待其他人免费文件。但我认为你需要显示一些代码来解决这个错误

© www.soinside.com 2019 - 2024. All rights reserved.