Hello!
2013/5/7 刘宏:
> 有没有什么工具可以追踪这样的问题的呀,现在不好定位是网络问题,还是本身库的问题。
>
追踪超时错误的工具比较难做,因为超时可能是由于瞬时的丢包造成的,也可能是服务器瞬时比较繁忙还不及处理新的 IO 事件。关于丢包,可能是
kernel 主动丢弃,也可能是在网络链路上丢弃,也可能是 mysqld 等后端服务器一侧瞬时的 accept() 队列溢出导致 SYN
包被丢弃和重传。
我一直打算编写一系列基于 systemtap 的工具对各种可能的情况进行追踪分析(目前网上也有一些工具可以捕捉上面提到的一些情形)。
当使用较小的超时配置时,一旦发生丢包就会导致秒级的重传延时,所以很容易发生超时。在真实应用中也是常见的现象。
一般的建议是总是使用比较小的超时设置,并在发生超时时自己尝试重连和重试请求。当你已经自己在 Lua 里面进行错误处理之后,可以禁用
cosocket 错误的自动日志功能:
lua_socket_log_errors off;
Best regards,
-agentzh