我有一台服务器,运行的是 CentOS 6.4 的默认安装。它位于 VPN 和防火墙后面,这两者都不是由我管理的 - 它们由托管公司管理。
当我长时间打开 ssh 客户端而不触碰它(在我的桌面上的 cygwin 中)时,它最终会冻结(Ctrl + C 甚至不起作用),然后经过很长一段时间后,它会恢复,但 ssh 连接会因错误而断开Connection Reset by Peer
。
通常情况下,我不会关心这一点,但是:我一直在开发一个带有客户端 GUI 的服务器应用程序。这两个应用程序之间确实存在心跳。今天,我将它们单独放置了不到两个小时,当我回来时它们已经崩溃了。服务器的错误消息显示:
java.io.IOException: Connection timed out
java.io.IOException: Broken pipe
客户端日志说:
java.io.IOException: An established connection was aborted by the software in your host machine
当我返回时,我单击了客户端上的“重新连接”按钮,而无需重新启动任何一个应用程序,它们又可以正常工作了,没有任何问题 - 所以这并不意味着其中一个应用程序耗尽了资源或类似情况。
我认为这更像是 ServerFault 问题而不是 StackOverflow 问题,因为我在 ssh 连接中也看到了类似的行为。什么可能导致此网络超时?我该怎么做?
答案1
对于 ssh,只需调整 ssh keepalive 会话
对于 putty(Windows),在会话下的属性中单击连接,在发送空数据包以保持会话活动下,您需要将保持活动之间的秒数设置为您想要的秒数
对于 Linux,您可以在 /etc/ssh/ssh_config 下找到它
主机 * ServerAliveInterval 300 ServerAliveCountMax 2
可能是错误“java.io.IOException:主机中的软件中止了已建立的连接”
这有很多可能的问题
首先要看的是 vpn 和防火墙,一些 vpn 使用“vpn-idle-timeout”,当会话在指定的时间内处于不活动状态时,它会终止任何用户的会话,还要注意,防火墙也可能或可能不会使用 TCP Keep Alive 数据包与其他设备交互。
另一件事是在应用程序方面:
例如 Oracle Web 服务器的“HTTP 级保持活动系统”
这可以调整服务器在关闭管理控制台中最旧的连接之前允许同时等待的最大连接数
但请注意
“如果允许每个请求无限期地保持连接打开,服务器可能会因连接而过载。在 UNIX 和 Linux 系统上,这很容易导致文件表溢出”
您可以查看此文档以供参考
http://docs.oracle.com/cd/E19146-01/821-1834/gdpiq/index.html