Como descobrir qual aplicativo / página PHP está sendo executado neste momento?

1

Eu tenho três servidores web usando nginx como frontend e php-cgi como backend.
Usamos o DNS round robin para distribuir a carga. Neste servidor temos vários aplicativos PHP, cada aplicativo é armazenado em sua própria pasta.

Temos uma grande quantidade de usuários em potencial (número de funcionários de aproximadamente 20000).

Cada aplicativo está sendo mantido por equipes diferentes e, consequentemente, pode estar usando diferentes frameworks PHP. Quando uma das aplicações tem uma página mal escrita, as instâncias do php-cgi podem ficar paradas. Quando uma pessoa suficiente acessou a página 'ruim', os três servidores inteiros podem ficar presos.

Existe um mecanismo para determinar qual aplicativo PHP tem um problema de página ruim?
Se eu pudesse determinar qual página do php está sendo executada por um processo php-cgi, eu poderia determinar a qual aplicativo a página pertence, e eu poderia desativar o aplicativo problemático em vez de assistir a todo o sistema ser desativado.

O problema é que eu não descobri como monitorar qual página está sendo executada (e ainda está travada). Se houver apenas um aplicativo e eu puder alterá-lo, eu inseriria instruções de log no início e no final do front controller. Ter mais de 6 aplicativos torna esse método impraticável.

    
por YudhiWidyatama 09.09.2011 / 05:59

2 respostas

1

Se cada aplicativo estiver usando um nome de host virtual diferente,
apenas certifique-se de um arquivo de log por host virtual

Além disso, você pode usar o caminho da URL

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

Deve haver algumas variáveis de ambiente global que identificam exclusivamente cada aplicativo. .

Além disso, você pode considerar definir o tempo limite de script mais baixo.
Anexar o tempo de processamento para cada solicitação do apache no arquivo de log também pode ser útil.

    
por 09.09.2011 / 06:57
0

Aqui está algo que pode funcionar. Na parte superior de todos os arquivos PHP em todos os sites, inclua uma linha de código que grava "SITE1_ERROR" em um arquivo de texto com uma linha de comprimento que todos os três sites verificam no servidor.

Na parte inferior de cada arquivo PHP, crie uma linha de código que grave no mesmo arquivo de texto e sobrescreva "SITE1_ERROR" com "SITE1_WORKING".

Em seguida, como a página PHP é processada de cima para baixo, se a página nunca for processada (devido a um erro), pelo menos, o arquivo de texto será atualizado para mostrar qual site tem um erro. Se não houver nenhum problema, o arquivo de texto deve sempre ler "SITEX_WORKING", em que X é o identificador exclusivo # do site.

Provavelmente existe uma maneira melhor do que isso, mas por que não dar um show? Na pior das hipóteses, você está escrevendo em um arquivo de texto duas vezes para cada chamada de página PHP bem-sucedida. E se a leitura / gravação simultânea no arquivo de texto de uma linha é um problema ou muito gasto de hardware / perda de tempo, talvez uma atualização de registro de tabela do MySQL ou algo seja mais eficiente, contanto que todos os três sites possam compartilhar a mesma tabela de banco de dados.

    
por 12.09.2011 / 08:58

Tags