我在 拥有一个专用服务器努西特,它“保证” 20mb 的连接。我在那里运行一个游戏服务器,这是我自己用 Java 编写的。游戏不会消耗大量内存/CPU/带宽(像国际象棋这样的简单游戏),但我需要在用户登录和注销期间保持 TCP 套接字打开。
我已经为这台专用服务器支付了每月 100 多美元,而用户每 10-60 分钟就会遇到 5 到 60 秒的延迟。目前,服务器上同时有 10 到 40 个用户。
我确实没有这方面的经验,也没有网络管理方面的经验,也没有租用专用服务器的经验。我只知道如何编程。我想知道这是否正常,是由于路由问题,还是由于我主机的路由器拥塞?还是其他原因?
从理论上讲,已经打开的 TCP 套接字可能出现超过 30 秒的延迟吗?我在网上搜索了数周,却从未找到有关此主题的任何信息。
我可以使用哪些工具,如何使用,来检查问题的根源,并得到确定的结果?我从来没有做过这样的事情,所以越简单越好。
感谢您的帮助。
答案1
我相信可能需要更多信息来解决这个问题。
你确定这是网络问题吗?
你可以通过以下方式找到它wireshark在您的电脑上运行,以便更好地分析当此类问题发生时,tcp 数据包方面发生的情况。(为了限制日志的大小,您应该将捕获的数据包限制到相关的服务器)。
服务器上可能同时运行其他进程,这会降低应用程序的速度吗?根据您的操作系统,您可以设置软件来监控 CPU/mem/IO 等变量。
当您的应用程序套接字由于故障而关闭时会发生什么?您可能会观察到超时问题,当您的应用程序创建新的套接字时这些问题会得到解决?
另外,当您提到的速度变慢时,您是否能够与服务器建立 ssh/ftp/http 连接?换句话说,这种速度变慢是否会影响游戏服务以外的其他服务?
希望这些想法能够有所帮助。
答案2
如果 ping 一切正常,请尝试执行 1000 次 ping,并检查是否 100% 都返回正常。我通常先使用 mtr 进行调试,看看是否有数据包没有通过。也许有一些数据包丢失,这就是服务器必须重新传输丢失的 tcp 数据包时出现延迟的原因。