【发布时间】:2015-05-14 02:53:12
【问题描述】:
所以我正在尝试使用带有 fluentd 的 unix 套接字来执行日志记录任务并随机发现它,偶尔会出现错误
拨号:{socket_name} 资源暂时不可用
关于为什么会发生这种情况的任何想法?
我尝试添加“重试”逻辑以减少错误,但有时仍会发生。
此外,对于 Fluntd,我们使用默认配置进行 unix 套接字通信
func connect() {
var connection net.Conn
var err error
for i := 0; i < retry_count; i++ {
connection, err = net.Dial("unix", path_to_socket)
if err == nil {
break
}
time.Sleep(time.Duration(math.Exp2(float64(retry_count))) * time.Millisecond)
}
if err != nil {
fmt.Println(err)
} else {
connection.Write(data_to_send_socket)
}
defer connection.Close()
}
【问题讨论】:
-
大概是
Dial函数调用了connect(2),如果路由缓存满了可以返回EAGAIN。您可能正在超载套接字堆栈。尝试切换到指数退避(即每次重试时将retry_duration加倍)。 -
服务器进程的
listen队列是否已满?