Amazon ec2 PHP Cronjob导致数据库连接过多

Amazon ec2 PHP Cronjob导致数据库连接过多,amazon-ec2,cron,wget,crontab,amazon-rds,Amazon Ec2,Cron,Wget,Crontab,Amazon Rds,我有一个EC2服务器,每分钟调用多个Cronjobs。大多数情况下,一切正常,但有时,由于数据库的原因,一个cronjob(wget)需要花费很长时间,然后进行下一个wget调用。这会减慢数据库的运行速度,最终会导致许多wget调用和超过200个数据库连接。大多数情况下,除了关闭RDS和EC2之外,没有其他方法可以在没有cronjobs的情况下重新启动 我想知道: 1.对于cronjobs,有什么更好的解决方案(我必须获取大量数据并将其存储在RDS中)? 2.如何确保每个URL只运行一个wget

我有一个EC2服务器,每分钟调用多个Cronjobs。大多数情况下,一切正常,但有时,由于数据库的原因,一个cronjob(wget)需要花费很长时间,然后进行下一个wget调用。这会减慢数据库的运行速度,最终会导致许多wget调用和超过200个数据库连接。大多数情况下,除了关闭RDS和EC2之外,没有其他方法可以在没有cronjobs的情况下重新启动

我想知道: 1.对于cronjobs,有什么更好的解决方案(我必须获取大量数据并将其存储在RDS中)? 2.如何确保每个URL只运行一个wget? 3.为什么RDS不关闭连接,尽管它们需要几分钟的时间?我必须更改哪个参数


谢谢大家!

取决于你想要实现什么

  • 是否要扩展数据库以处理多个连接而不发生故障
如果每个cronjob调用都很重要,那么您应该这样做。你不能错过一个半过程的请求

要优化这一点,您首先要弄清楚您的时间花在了哪里。它是在服务器端处理,还是纯粹的数据

  • 如果您不介意部分请求或跳过呼叫
一个快速修复方法是使用一个wget超时选项(假设wget是您的所有cronjobs所做的) 请注意,这可能会导致呼叫中断。如果请求总是需要超过超时时间,它将永远不会执行


更健壮的解决方案是确保一次只有一个cronjob实例处于活动状态。IIRC Perl有一个简单的CPAN解决方案。

使用锁文件防止脚本的多个实例同时运行。