我在EC2上运行Java Play框架。当我在生产环境启动Play后,一切正常。然而,大约运行了一天后,连接到RDS实例时会出现UnknownHostException错误,这将阻止EC2与RDS之间的任何交易。如果我重新启动应用程序,它再次正常工作。
我已经检查过连接池,相信其正常工作。此外,我已经使用networkaddress.cache.ttl = 0和networkaddress.cache.negative.ttl = 0进行了测试。然而,我仍然会得到错误。
有人对此有想法吗?
我在EC2上运行Java Play框架。当我在生产环境启动Play后,一切正常。然而,大约运行了一天后,连接到RDS实例时会出现UnknownHostException错误,这将阻止EC2与RDS之间的任何交易。如果我重新启动应用程序,它再次正常工作。
我已经检查过连接池,相信其正常工作。此外,我已经使用networkaddress.cache.ttl = 0和networkaddress.cache.negative.ttl = 0进行了测试。然而,我仍然会得到错误。
有人对此有想法吗?
将此内容从评论中移至答案。问题已通过停止 EC2 实例然后重新启动来解决。之后,错误未再出现。
在我的情况下,它没有自行解决。我最终停止/启动了我的 EC2 实例,这永久地解决了问题。我猜测是在重新启动时它被分配给另一个(配置更好的)EC2 实例。
执行此操作 会发生什么。
新的内部IP地址,但可能是随机相同的。[VPC实例通过停止/启动保持相同的内部IP地址。]
新的外部IP地址(虽然可能是随机相同的)。
如果在停止实例之前将弹性IP地址与实例关联,则需要在启动后重新关联它。 [VPC实例通过停止/启动保持弹性IP地址关联。]
实例以前的临时存储中的任何内容都被清除,并提供新的临时存储(通常作为/mnt挂载)。
您可以将实例停止任意长时间,而不会因运行时间而收费(尽管对于EBS卷存储,您确实会以更低的费率收费)。请参见下一个要点。
当您再次启动实例时,将为该实例启动一个新的计费小时。例如,如果您启动了一个新实例,然后在前60分钟内停止/启动了3次,则将收取4个小时的费用,而不是1个小时。
当您想要再次启动实例时,EC2可能没有可用的正确实例类型插槽来运行您的实例。我曾经遇到过这种情况,并临时切换到其他可用的实例类型以使其再次运行。