2012-06-28 42 views
7

Tengo un sitio web con un script personalizado que se ejecuta en un servicio de alojamiento VPS. Todos los guiones salen a través de index.php usando mod_rewrite y .htaccess para URLs amigables¿Cómo rastrear el script PHP ejecutando un proceso determinado?

Algo en mi guión está generando un alto uso de la CPU, como se muestra: CPU usage

Cuando voy y strace un proceso dado consigo esto que no entiendo:

setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={90, 0}}, NULL) = 0 
    rt_sigaction(SIGPROF, {0x7a6b8f, [PROF], SA_RESTORER|SA_RESTART, 0x2af8ae8742f0}, {0x7a6b8f, [PROF], SA_RESTORER|SA_RESTART, 0x2af8ae8742f0}, 8) = 0 
    rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0 

Esto se repite continuamente en un bucle infinito.

Lo que necesito saber es cómo rastrear el script PHP exacto que causa este problema. ¿Alguna sugerencia?

+1

Habilite el registro de errores. Establecer el tiempo máximo de ejecución. Echa un vistazo al registro de errores que el script no funciona. Probablemente, cree su propio controlador de errores que pueda volcar los detalles de la solicitud en caso de que se desencadene el error de tiempo de espera, para que pueda comenzar a reproducir esto con un depurador remoto. – hakre

+0

¿Y qué API estás usando? CGI? – hakre

Respuesta

2

Utilice la función getmypid() en su secuencia de comandos. Simplemente envíe esto a un archivo de registro o algo para ver qué script es cuál.

EDIT: Utilice el ajuste auto_prepend_file configuración a incluir de forma automática este fragmento en todos sus archivos:

php_value auto_prepend_file append.php 
+0

El problema es que no sabe qué secuencia de comandos es ... – Josh

+0

Por supuesto que no. Supongo que está tratando de resolver esto depurando sus guiones. Él no dijo que no puede editar sus guiones. Sugiero que el OP edite sus scripts para anotar qué PID usa cada script para ayudar en sus esfuerzos de rastreo. – davidethell

+1

¿Está sugiriendo que lo agregue a cada archivo PHP? DE ACUERDO. Creo que veo lo que quieres decir. Si él hace que cada registro de script '__FILE__' * y *' getmypid() ', entonces esta es una respuesta válida. – Josh

6

Si usted puede conseguir the PECL proctitle package en su instalación de PHP, puede utilizar eso para hacer index.php establecer su título proceso al nombre del guión al que se le entregó. (El título del proceso alterado puede aparecer o no en los visualizadores de la tabla de procesos; use ps si falla todo lo demás.)

+1

Oh genial: D aprender algo nuevo todos los días. – Leigh

+0

¡Es un truco ingenioso! Tendré que recordar eso. – Josh

+0

@chaos ¿cómo sé si está disponible en mi host? si no, ¿cómo lo instalo y si está instalado ... cómo lo uso? –

Cuestiones relacionadas