【问题标题】:Amazon EC2 Linux PHP slowing down after each deployment每次部署后 Amazon EC2 Linux PHP 都会变慢
【发布时间】:2018-09-24 17:45:42
【问题描述】:

我有一台运行 Laravel 应用程序的 EC2 服务器,由 RDS MySql 数据库驱动。每次我部署应用程序时,它都能正常工作,但在使用大约 1 周后,它会逐渐变慢,直到最终网站根本无法加载(对于任何访问者)并导致 502 错误。我重新部署应用程序(从而重新启动服务器)它工作正常,然后又开始变慢。

这种应用程序的资源持续消耗的可能原因是什么?尝试过 Cloudwatch 和服务器日志后,我找不到任何接近其限制的资源,但行为仍然存在。 (CPU、CPU 积分、Burst、内存等...)

谢谢。

【问题讨论】:

  • 可能无法找到,除非您的应用程序记录某些内容,您必须查看 CPU 负载、磁盘、内存空闲等以找出答案
  • 有哪些可能的原因?它不是 CPU、磁盘或空闲内存...
  • 为什么它会随着时间的推移变慢?这是一种累积效应
  • 你检查过网络吗?例如:与 RDS 的打开连接太多,并且慢查询卡住了,所以您的 EC2 实例一直在等待.. 所以这也可能是 RDS 方面的情况
  • 还要检查 RDS 中的活动连接,如果它也在上升,这意味着您的应用程序正在创建大量数据库连接,这会导致整个应用程序变慢。

标签: php mysql amazon-web-services amazon-ec2 sysadmin


【解决方案1】:

502 错误表明 Web 服务器和应用程序处理程序之间的通信存在问题 - 很可能是由于您的实例由于它是微型(猜测)而耗尽内存造成的。在这种情况下,我还假设您使用的是 PHP-FPM。

尝试仅重新启动 PHP-FPM 并查看您的网站是否再次响应。这将告诉您您的问题很可能发生在应用程序层。

Tail Web Server 错误日志 - 您应该在此处了解导致问题的原因以及您是否不确定是否发帖。

如果您的应用在规定的时间内没有响应网络服务器,这也会导致问题 - 检查您的 PHP.ini 以获取以下参数:

max_execution_time = 30

如果使用 Nginx,您还需要在此处修改配置以增加超时。查找以下参数:

fastcgi_connect_timeout 300;

完成此操作后,您可能希望创建一个交换文件。要么就是这样,要么增加你的实例大小。由于您运行应用程序的基础设施,您的问题实际上不太可能是 RDS 或网络问题(显然)。

OPS 说明 我使用以下方法检查了错误日志:https://www.bigappledesigns.com/2013/06/how-to-access-apache-web-server-httpd-error-logs-for-amazon-ec2-linux-and-most-other-linux-varieties-also/ 这揭示了几个“内存不足”的消息。

【讨论】:

  • 感谢您的建议!我检查了日志,显示服务器内存不足!如果我升级实例,这种情况是否会继续发生,因为它似乎会随着时间的推移而增加?
  • 不客气。可能不会,但这取决于您需要的实例大小以及整个堆栈 - 例如PHP / Framework等版本。最快的解决方案是增加实例大小。问题是它不能保证修复。您绝对应该首先创建一个交换文件。这是一个简单的解决方法,然后您可以在真正需要时增加实例大小。
  • 已添加交换文件,感谢您的额外建议!我希望稳定它
  • 没问题,如果需要,您仍然可以随时访问更高的实例。
  • 该交换文件运行良好,而且很容易设置或添加到弹性 beanstalk。现在服务器没有“崩溃”,我可以看到某些任务使用了所有内存,比如构建,但 99% 的时间我们有足够的内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2011-10-11
  • 2023-03-24
  • 2018-01-29
  • 2015-09-18
  • 2011-08-16
相关资源
最近更新 更多