我在 Windows 7 系统上使用 mysql-proxy 0.8.3。
有时,我会在日志中收到以下调试消息:
(调试).\chassis-event-thread.c:254: 来自 event-notify-fd 的 recv() 失败:未知错误
mysql-proxy 进程开始占用 25% 的 CPU(四核),直到我将其终止。它继续正确处理查询,同时使系统过载。
相同的查询/脚本并不总是会触发问题。我不知道如何修复它。
答案1
我没有使用过 mysql 代理和 windows,但我做了一些调查。我找到了 mysql-proxy 源,您的错误从这里记录下来:http://bazaar.launchpad.net/~mysql-proxy-developers/mysql-proxy/0.8/view/head:/src/chassis-event-thread.c#L252(我猜想 2 行差异来自源代码格式)。看起来 238 行的 recv 返回了 E_NET_WOULDBLOCK 值。第 57 行有定义(您说您在 Windows 上)
#define E_NET_WOULDBLOCK WSAEWOULDBLOCK
因此真正的错误是 WSAEWOULDBLOCK。搜索后我发现:https://stackoverflow.com/a/14549541
WSAEWOULDBLOCK 并不是真正的错误,只是告诉您发送缓冲区已满。如果您的网络饱和或对方只是不确认收到的数据,则可能会发生这种情况。
我猜这是 mysql 代理中的一个错误。它可能陷入了无限循环,试图从繁忙/空/死机的套接字接收数据(这就是 CPU 使用率达到 100% 的原因)。也许您可以尝试使用 master 版本(我不知道是否有 Windows 版本)?