我有一个使用DiscordShardedClient和Discord.net库的Discord机器人,我有16个服务于该机器人行会的碎片。
在过去的几周中,该机器人的响应速度非常慢。现在,只是碎片#9和#10连续断开并出现错误:服务器缺少心跳,然后重新连接。
现在,我发现这与服务器ping有关。我让机器人检查了ping,并且始终保持〜30ms,所以不是这样。另外还有足够的带宽。
我还将这个机器人安装在具有32GB RAM的8核16线程服务器上,并将数据库安装在单独的快速服务器上。我认为没有硬件限制。
此外,我增加了分片的数量,希望因为我通常平均每小时可以收到约2500个命令来解决该问题。
我还内置了垃圾邮件检测功能,可以检测到用户并向用户发送垃圾邮件,然后将其禁用。我怀疑用户向公会发送垃圾邮件会导致碎片崩溃。
我也熟悉心跳错误。这通常意味着该漫游器挂在某个地方,无法响应Discord。通常,机器人在执行主要任务时不会重新连接。但这一次它重新连接。
我在测试中注意到的几件事:该机器人速度更快,并且在一夜的需求低迷时不会崩溃。我调试了代码以寻找长时间的延迟,但没有找到。数据库访问和命令执行非常快。它似乎只是来自DiscordShardedClient.MessageRecieved的事件被延迟。而且,启动后,随着时间的流逝,该机器人的速度似乎有所降低。我检查了内存泄漏并优化了我的阵列,并挤出了将近一半的RAM。仍然没有解决我的问题。