【问题标题】:linux process constantly drops connectionslinux进程不断断开连接
【发布时间】:2012-06-17 20:27:13
【问题描述】:

我编写了一个当前在 Ubuntu 12.04 x64 VM 上运行的服务器应用程序。应用程序连接到另一台服务器,从该服务器获取一些数据,对其进行转换,然后将其发送回在其他地方运行的客户端应用程序。所有这些都超过了 TCP 之上的 boost::asio。 IO相当重。

每天运行几个小时左右后,我们都会看到服务器断开客户端连接。当客户端尝试重新连接时,它们的连接一旦建立就会再次断开。 boost::asio 的错误报告是“Connection reset by peer”。这似乎无限期地持续下去。在此期间,我可以 ssh 进入机器,并且从我们的应用程序到服务器进程的连接仍然健康。负载适中。重新启动我们的应用程序即可解决问题。

关于如何进一步调查此问题的任何想法?

【问题讨论】:

  • 1.这是否发生在您的开发环境中? 2.你有tcp转储吗? 3. 服务器进程是什么,它的日志上有什么? 4. 是否有任何防火墙、状态防火墙或路由器维护主机之间的任何状态? 4. 你有客户端的 strace 输出吗?
  • 另一种选择:netstat -an 告诉你什么(当应用程序行为不端时)?
  • MarkR: 1) 不,它不会发生在任何地方,除非有这个特定的安装。 2) 我现在正在运行 tcpdump。 3)我认为服务器进程不应该相关,它的连接一直保持稳定 4)我不知道 - 这是在客户端站点上。 5) 没有。我会试着弄一个。
  • ChrisopheD:没什么不寻常的,我看到的连接是我所期望的。
  • 可能是客户端和服务器之间有防火墙或NAT框。同步cookies?

标签: linux tcp boost-asio


【解决方案1】:

当 clinet 应用程序尝试连接时出现错误 ""Connection reset by peer" 意味着端口应用程序尝试连接可能未打开或已打开,但无法接收其他连接(服务器有最大数量的未接受连接)。

在网络级别,您将看到客户端向服务器发送SYN,而服务器以RST 响应。

在服务器上运行netstat -antp,查看服务器端口是否处于LISTEN状态。

【讨论】:

  • 谢谢dimba。对等消息重置的连接由我的服务器而不是客户端显示(客户端是 Windows 框)。服务器似乎接受了新连接,但它们会立即被重置消息丢弃。
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 2014-07-17
  • 1970-01-01
  • 2015-12-03
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
相关资源
最近更新 更多