因此我有以下设置:
服务器 - t2.micro ECU Ubuntu 实例数据库 - t2.micro RDS MySQL 实例。
该堆栈是一个具有默认 Apache 设置的基本 LAMP 堆栈。
我基本上是在运行网络爬虫。我设置了一些基于 cronjob 在服务器上运行的方法。我注意到几分钟后,数据库连接数慢慢上升到 ~60,我认为这可能太多了。60 之后,当我运行:show processlist;
我得到所有连接命令“睡眠”,EC2 实例无响应。我无法 ssh 进入它,它几乎没有响应,直到我停止/启动实例,这会更改 IP 地址并导致 45 分钟的维护才能再次启动。
我知道这可能与最大连接数有关,但我很困惑为什么 EC2 实例会崩溃……?我监控了 EC2 和 RDS 仪表板上的所有内容,除了“数据库连接”之外,没有任何东西超出限制,EC2 似乎根本不在乎,它的负载大约为 5%。
该应用程序没有记录任何信息,只有 access.log 和 errors.log 正在运行,而且它们似乎没有满,是不是有什么我没有考虑到的?
答案1
我怀疑您可能运行的负载对于 t2 实例类型来说太高了。这些实例根据信用系统获得 CPU 时间,而 t2.micros 是实例类中总体 CPU 能力最低的。这些信用在 t2.micro 上以每小时 6 个的速度累积,这使您能够在 6 分钟内将 CPU 核心突增到 100%。所有其他时间您只能获得 10% 的核心。此外,只有当您的实例完全空闲时,您才会累积信用。
我认为您正在快速使用可用信用(在您的 Web 实例和 RDS 实例上),并且试图在其余时间内以太少的 CPU 马力运行,这导致您的实例由于缺乏资源而基本上挂起。
如果您想验证我的理论,您可以查看 EC2 实例和 RDS 实例的 CloudWatch 指标,并查找以下内容:CPUCreditUsage 和 CPUCreditUnits。这些图表将显示您是否正在积累和/或使用您的信用。
欲了解更多信息,请参阅此页面: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html
您的解决方案可能会将您的一个或两个实例升级为 T2 实例类中更大的实例,或者如果您需要持续的性能,则完全选择该类之外的实例。