Pregunta

He implementado un archivo de registro que se va a almacenar la CPU y la memoria de estado de un proceso después de cada minute.I han limitado el tamaño máximo del archivo de 3 MB (eso es suficiente para mi propósito).

El guión será llamado por una tarea programada después de cada minuto y el guión registrará los detalles de ese minuto y cambiará el nombre del archivo como "Log_.log" .

Cuando los alcances de tamaño "3MB - 100 bytes" que restablecen el puntero del archivo a punto para el inicio y se sobreponen a la primera entrada en el archivo de registro y ahora van a cambiar el nombre del archivo como "log_ <0 + alguna compensado > .log ".

Como estoy cambiando el nombre del archivo después de cada minuto para actualizar la posición del puntero del archivo, es una buena manera / eficiente?

No quiero mantener más de un archivo de registro para este propósito.

Otra opción para mí es mantener la posición del puntero de archivo en un archivo, pero .... otro archivo !! No hay interés en el mantenimiento de uno si esta opción es buena:)

Gracias de antemano.

¿Fue útil?

Solución

¿Es usted un ingeniero? Este es un ejemplo agradable de alguna tarea sencilla, resuelto por un excesivamente complejo solución perfecto estado de funcionamiento, pero.

A menos que el contenido que incluya en toma exactamente tantos bytes como el contenido de sacar, escribiendo "en" un archivo en realidad causa toda la parte siguiente después de que su posición de escritura a ser reescrita en el disco. Anexar es mucho más barato .

Cambiar el nombre del archivo para almacenar las obras puntero - pero de no muy elegante y hace cosas más complejas (por lo menos, sus necesidades de proceso escriben los derechos sobre el directorio en el que reside el archivo - los demás sólo acceso de escritura a dos archivos es suficiente)

A menos espacio en disco es un problema (y en realidad, rara vez es), su enfoque es menos eficiente que digamos, append todo en un archivo, y girar el archivo cuando alcanza su tamaño máximo . De esta manera siempre tiene la última 3 MB de registros disponibles, y un máximo de 3 MB más en su archivo actual. Esto hará que el análisis del archivo mucho más fácil también, en lugar de volver a calcular toda la cosa posición del puntero.

Actualizar para responder a su comentario:

Cambiar el nombre de un archivo cada minuto (o incluso cada segundo) no debe ralentizar el sistema significativamente, no se preocupe por eso.

Nuestras preocupaciones son principalmente "por qué cree que necesita cambiar el nombre del archivo". No es mejor técnicamente, no es mejor desde un punto de vista lógico, tiene una gran cantidad de otros (futuros) las tareas más difíciles. Se podría almacenar el puntero de archivo en un archivo separado, o al final de su archivo, y hay mejores ^ H ^ H ^ H ^ H ^ H ^ H soluciones más simples que no requieren el puntero de archivo en absoluto.

Otros consejos

Estoy confundido por las que se cambie el nombre de su archivo. ¿Qué tiene esto lograr?

¿Las entradas del registro de tamaño fijo? O el tamaño variable?

Si las entradas son fijos tamaño, entonces no hay ningún problema en volver a escribir el archivo existente desde el principio: que no siempre se tienen entradas incompletas en su archivo, y si usted está escribiendo un mostrador o marcas de tiempo para el archivo , debe quedar claro donde se encuentra el 'cursor'.

Si las entradas son de tamaño variable, entonces usted probablemente no debería comenzar re-escribir el archivo desde el principio sin alguna manera lo que es claro que el 'cursor' se encuentra en el archivo, y el código de escritura que es resistente a la lectura de registro truncado entradas.

¿Se puede volver a utilizar herramientas existentes tales como RRDtool ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top