如何找出当前正在运行哪个PHP应用程序/页面?

我有三个Web服务器使用nginx作为前端和php-cgi作为后端。
我们使用DNS循环来分配负载。 在这个服务器上我们有几个PHP应用程序,每个应用程序都存储在它自己的文件夹中

我们有大量的潜在用户(员工人数约20000人)。

每个应用程序由不同的团队维护,因此可能会使用不同的PHP框架。 当一个应用程序有一个写得不好的页面时,php-cgi实例可能会被卡住。 当有足够的人访问“坏”页面时,整个三台服务器可能会卡住。

有没有一种机制来确定哪个PHP应用程序有不好的页面问题?
如果我可以确定php-cgi进程正在运行哪个php页面,则可以确定该页面属于哪个应用程序,并且可以停用有问题的应用程序,而不是观察整个系统停机。

问题是我没有find如何监视哪个页面正在运行(仍然卡住)。 如果只有一个应用程序,我可以改变它,我会在前端控制器的开始和结束处插入日志语句。 有超过6个应用程序使这种方法不再实际。

如果每个应用程序使用不同的虚拟主机名,
只要确保每个虚拟主机有一个日志文件

另外,您可以使用URLpath

SetEnvIf Request_URI /SOME_PATH_1 apps_1 SetEnvIf Request_URI /SOME_PATH_2 apps_2 CustomLog logs/apps_1.log env=apps_1 CustomLog logs/apps_2.log env=apps_2 

必须有一些全局环境variables来唯一标识每个应用程序。

另外,您可以考虑设置较低的脚本超时。
将每个Apache请求的处理时间追加到日志文件中也可能有帮助。

这是可能的工作。 在所有站点上的每个PHP文件的顶部,都包含一行代码,将“SITE1_ERROR”写入到一行一行的文本文件中,这三个站点扫描指向服务器上的所有文本文件。

在每个PHP文件的底部,写一行代码写入同一个文本文件,并用“SITE1_WORKING”覆盖“SITE1_ERROR”。

然后,由于PHP页面是自上而下处理的,如果页面从未完成处理(由于错误),至less文本文件将被更新以显示哪个站点有错误。 如果没有问题,文本文件应该总是读取“SITEX_WORKING”,其中X是站点的唯一标识符#。

可能有比这更好的方法,但为什么不给它一个表演? 最糟糕的情况是,每次成功的PHP页面调用都要为文本文件写入两次。 如果同时读取/写入单行文本文件是一个问题或太硬件税/浪费时间,也许MySQL表logging更新或更有效,只要所有三个站点可以共享相同的数据库表。