调试陷入困境的PHP进程的原因

时间:2016-09-22 14:13:36

标签: php mysql cakephp newrelic

我正在试图找出导致我的系统打开大量PHP线程的原因。这个问题在过去两周内发生了3次,并且如果未检测到几个小时就能够使我们的应用程序崩溃,因为一旦打开300个数据库连接就会阻止任何人进一步连接。

该应用程序基于CakePHP 2.X,运行在多个共享RDS数据库的EC2实例上。

出现问题的主要标识符是大量数据库连接,如下图所示: enter image description here

我们有CloudWatch监控设置,当平均连接超过40分钟超过5分钟时通知我们(通常连接不会超过10)。

看看New Relic我也可以看到php进程的数量每分钟稳步增加1。这是在我们的操作服务器上,它只处理后台处理和任务,并且不处理任何Web流量。 enter image description here

同时,Web服务器上的图表显示正常。

在查看有关长时间运行进程的New Relics信息时,没有提供任何信息表明任何php进程运行超过20分钟,但是,这些进程被手动杀死,这可能就是为什么它们在New Relic中不可见 - 我相信它可能不会记录被杀的进程。

虽然这个问题现在发生了3次,但我仍然不确定导致问题的原因或如何调试特定运行的php线程正在做什么。 最后一次发生这种情况我可以看到所有的php线程都在运行,并且可以看到它们已经运行了一段时间,但不知道它们在做什么或者如何找出它们正在做什么,并防止数据库成为超载我不得不杀死他们。

我在此处忽略了哪些工具或其他信息可能有助于我在搜索中确定导致此问题的特定过程?

0 个答案:

没有答案