2012-04-03 14 views
5

Escribo un daemon en PHP. No tomé una clase de OS en la universidad. Entonces, me pregunto, ¿cuáles son las estadísticas del servidor/otras que debo analizar para asegurarme de que mi Daemon no consuma demasiados recursos del sistema y pueda escalar cuando haya más registros de MySQL? Básicamente, mi daemon está procesando un montón de filas de tablas mysql.A Daemon on the Rocks

Por ejemplo, entiendo que necesito ver cuánto tarda el daemon en procesar una cierta cantidad de filas y la cantidad de memoria que está usando. Pero, ¿cómo puedo determinar si está perdiendo memoria? Además, ¿con qué otros parámetros del sistema debería juzgar al daemon?

+0

Se puede obtener algo de lo que necesita al tener sus entradas de escritura de daemon en un archivo de registro en el disco. Por ejemplo, podría hacer que escriba la hora y un mensaje cada vez que procese otras 100 filas. Al leer el archivo de registro, obtendrá información específica del daemon. El uso de las herramientas de línea de comandos de Unix puede mostrarle la memoria, el procesador y las estadísticas de uso del disco. – Jazz

+0

uso de CPU/uso de memoria/iowait serán sus principales preocupaciones. – Corbin

+0

Si está sobrecargando la CPU, use 'usleep' en PHP para reducir la velocidad. ¿Estás haciendo un fondo de tu daemon con &? – halfer

Respuesta

2

Pero, ¿cómo puedo determinar si hay una pérdida de memoria?

Las cosas que pregunta aquí tienen poco que ver con el sistema operativo. Tiene razón en preocuparse por el uso de la memoria. Una respuesta adecuada a esta pregunta va más allá del alcance de una publicación aquí, pero es posible que desee comenzar mirando cómo funciona el recuento de referencias para la administración de memoria, y asegúrese de que haya configurado el comprobador de referencia circular en su instalación de PHP. La trama se complica cuando descubre que el cliente mysql bloquea PHP mientras se ejecuta e ignora los límites de memoria de PHP, por lo que si obtiene un conjunto de resultados demasiado grande, no lo sabrá hasta que mysql_query regrese y su código se caiga: use siempre LIMITE en las consultas (o selección de PK) y, por preferencia, ejecute el daemon bajo un watchdog. Pruebe utilizando límites de memoria variables inferiores a los que pretende utilizar en producción.

Tenga en cuenta que PHP solo comenzará a hacer que haya más memoria disponible a través de la recolección de elementos no utilizados cuando cree que se está quedando sin memoria.

¡Escribe muchas cosas para registrar archivos!

0

Dependiendo de cómo va a ejecutar el tope de encendido Daemon en Linux y luego haga que procese un montón de filas (100k +, o algo que le tomaría unos 30 segundos para ejecutar) de lo que anticipa. Mire para ver qué tan rápido aumenta el uso de la memoria: con pequeñas tareas sucede demasiado rápido, necesita el proceso de ejecución.

Luego asegúrese de desarmar ($ objectOrString), cierre todos los archivos y conexiones a la base de datos tan pronto como termine de usarlos: esto ayudará.

De nuevo, dependiendo de lo que este archivo vaya a hacer, puede dejar que termine y utilizar un trabajo cron para iniciarlo de manera que PHP pueda ejecutar su recolección de elementos no utilizados por usted.