在TCP服务器中,我知道拒绝连接可能是因为
尝试连接 UNIX域套接字时ECONNREFUSED
的可能原因是什么。
这个问题是为了帮助我缩小范围a MySQL connection mystery on a Solaris 10 configuration。
答案 0 :(得分:-2)
拒绝连接并不意味着服务器关闭了套接字(连接到它之后),这意味着没有服务器监听套接字。所以,首先,您的服务器崩溃,然后,客户端拒绝连接。 (除非积压已满,如果您传递给listen()的积压大小太小,或者您的服务器没有足够快地接受()连接,但我在现实生活中从未见过这种情况)。
通常情况下,我会把它归咎于某些防火墙,但是,因为在你的另一篇文章中,你说它只是间歇性地发生,我想会发生的是:你的mysql服务器崩溃,safe_mysqld重新启动它,这需要一个几秒钟,在启动阶段,你得到你的连接拒绝错误,因为那里没有服务器听你的。尝试设置一个cron作业" ps -ef | grep mysqld"每分钟检查进程ID是否会不时更改,并尝试将这些更改与您的连接拒绝错误消息进行匹配。
如果mysqld没有重新启动,即进程ID保持不变,请尝试类似" truss -v listen,accept -p"。这应该在每次客户端连接时给你一些输出 - 也许你可以匹配"在桁架中发生的很多事情"我现在拒绝连接"。但是,不要在负载很重的生产系统上执行此操作,否则桁架将a)淹没您的输出并且b)显着降低服务器速度。