我有一个 Linux 服务器程序。我注意到,大约2 或 3 天后,服务器停止响应。当我查看服务器日志时,我发现“对等方重置连接”消息。
我必须重启服务器。一切正常,但过了2 或 3 天后,又出现了同样的问题。
任何帮助,将不胜感激。
编辑:抱歉,描述得不够详细。
这是我编写的一个简单的服务器,它接受 TCP 连接。它用 C# 编写,我使用 mono。我按如下方式启动服务器:nohup mono StartServer.exe &
在同一目录中创建了一个名为 nohup.out 的文件,该文件用作日志。经过2-3 天左右的时间,我发现 mono 进程仍然存在。但客户端(silverlight 客户端)无法连接到服务器:它们收到“accessdenied”消息。实际上,即使服务器关闭,也会收到“accessdenied”消息。所以我猜,服务器没有响应。
当我查看 nohup.out 文件时,我发现错误消息“对等方重置连接”。
实际上,我最初计划将其托管在 Windows 服务器上,但发现它在 Linux 服务器上也能正常工作。由于我对 Linux 不太熟悉,所以我在想我是否错过了一个明显的配置。
令我感到困惑的是,直到大约 3 天之前,一切都运行正常。
我对其进行了负载测试,让一个客户端与服务器建立多个连接,发现我在一天之内遇到了同样的错误。连接数约为 30。
答案1
我会跑
# netstat -anp
和
# lsof -n
查看是否存在连接或文件句柄泄漏。我怀疑连接或文件未正确关闭,并且一段时间后打开的文件数已超过 1024 个(这是一次打开文件的默认限制,除非使用 ulimit 进行更改)——这又会阻止它创建新的连接。