apache - AWS ElasticBeanstalk 定期关闭
问题描述
我最近注意到我在 AWS Elasticbeanstalk 设置中的 laravel 项目表现得很奇怪。服务器将在几分钟内关闭。在 t3.small 中,它每 50 分钟下降一次。健康选项卡说内存耗尽或什么的。它会“严重”大约 5-10 分钟,然后在我不做任何事情的情况下恢复。基本上只是整个曲折的监控。在 t3.nano 中,它大约每 5 分钟下降一次。
以下是我所做的一些我怀疑是原因的事情
- 我已经重新启用推送器进行广播。该项目之前有一个推送器设置,并且运行良好。但是,我禁用(删除了所有使用它的部分),因为我还不需要它。我重新启用它并出现问题
- 我玩过 AWS WAF 和 Cloudfront。所以我之前正在研究这两个部分并使用了一些设置,但是,我不记得使用过与我的 EBS 应用程序相关的任何一个。我确实删除了我在 WAF 和 Cloudfront 上添加的所有内容。
以下是一些事实:
- 每当我删除创建 schedule:run 和 queue:work 的容器命令时,它就会变得完全正常。即使我模拟每秒发送数百个请求,也完全是“OK”状态。
- 我尝试将其扩展到 3 个实例,结果仍然相同,但是停机时间变慢了
- 每当它关闭时,它都会给出一个 503 错误代码
- EBS 的设置是在 64 位 Amazon Linux/2.8.4 上运行的 PHP 7.2
- 我正在通过每分钟发送 1 条 Pusher 消息来测试作业和队列。它除了发送当前时间之外什么都不做。这也是唯一运行的 cronjob。
- cronjob 工作正常,我也可以收到 Pusher 消息,除非在停机期间
这是我对日志的观察 - 有一个与 Apache 相关的“内部虚拟连接”。记录它的时间与停机时间发生的时间相同。
我已经尝试了日志上的每一个提示,包括在 cronjob 上的不同设置和其他可能的原因。我也试过问我的同行,但以前没有人遇到过这样的错误。事实上,他们测试了我的 cronjob,它对他们来说工作正常。
我在 /var/log/httpd/error_log 中也有这个错误
[Fri Nov 23 19:07:35.208657 2018] [suexec:notice] [pid 3142] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Nov 23 19:07:35.228633 2018] [http2:warn] [pid 3142] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Fri Nov 23 19:07:35.228644 2018] [http2:warn] [pid 3142] AH02951: mod_ssl does not seem to be enabled
[Fri Nov 23 19:07:35.229188 2018] [lbmethod_heartbeat:notice] [pid 3142] AH02282: No slotmem from mod_heartmonitor
[Fri Nov 23 19:07:35.267841 2018] [mpm_prefork:notice] [pid 3142] AH00163: Apache/2.4.34 (Amazon) configured -- resuming normal operations
[Fri Nov 23 19:07:35.267860 2018] [core:notice] [pid 3142] AH00094: Command line: '/usr/sbin/httpd -D FOR
解决方案
这是一个意外的 CPU 积分和 t2/t3.* EC2 实例的节流限制的案例。1 个 CPU 积分允许 (t2/t3) 实例以 100% CPU 运行 1 分钟。所有 t2/t3.* 实例 CPU 积分都以每小时固定的速率为正在运行的实例补充(此速率取决于实例类)。因此,长时间的负载(超过某个阈值)将逐渐耗尽这些信用,导致您在上面描述的状态。
建议使用更高层级的实例(m3.medium 及更高版本)来持续维持生产工作负载。在多个实例前面放置负载均衡器也是保持可用性的好方法。
可以在此处找到更多信息:https ://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
推荐阅读
- java - 如何将文件字符串格式化为点路径
- java - IntelliJ - 在一个包含许多方法的类中查看 *single* 方法
- triggers - TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin
- python - 加快python中插值函数的积分
- angular - 将两个动态变量合并为一个以输出单个结果 - 打字稿
- ios - 移动应用发布(Google Play / App Store)
- javascript - 在 JavaScript 中选择一个节点项
- javascript - 不再支持three.js Spotlight.map TextureLoader?
- python - df.head() 和 df.head 有什么区别?
- firebase - 如何为群组消息应用设置 Firebase 数据库规则