2012-05-10 17 views
10

que estoy tratando de averiguar si hay una biblioteca que me da algo cerca del equivalente de contadores de rendimiento personalizados de Windows (que se describe aquí http://geekswithblogs.net/.NETonMyMind/archive/2006/08/20/88549.aspx)Contadores de aplicaciones en Linux? (Y OSX?)

Básicamente, estoy buscando algo que puede se usará para rastrear los contadores globales dentro de una aplicación, y (idealmente) algo que presente esa información a través de una interfaz bien definida a otras aplicaciones/usuarios. Estas son estadísticas de aplicaciones; cosas como la memoria y el disco se pueden capturar de otras formas, pero estoy buscando exponer el rendimiento/transacciones/"widgets" manejados durante la vida útil de mi aplicación.

que he visto esta pregunta:

Concept of "Performance Counters" in Linux/Unix

y éste

Registry level counters in Linux accessible from Java

pero tampoco es exactamente lo que estoy buscando. No quiero escribir un archivo estático (después de todo, esta es información dinámica, debería poder acceder incluso si el disco está lleno, etc.), y si es posible, preferiría evitar un conjunto de códigos local. Idealmente, al menos en Linux, estos datos (creo) aparecerán en/proc de alguna manera, aunque no me queda claro si eso se puede hacer desde el territorio del usuario (esto es menos importante, siempre y cuando aparezca en algunos camino a los clientes.)

Pero volvamos al quid de la cuestión: ¿existe alguna biblioteca incorporada o adecuada de terceros que me proporcione contadores globales personalizados (subprocesos, seguros) adecuados para métricas de aplicación que pueda usar en Linux y otros * sistemas operativos NIXy? (¿Y se puede interconectar desde C/C++?)

+2

estado buscando el mismo, no he encontrado ninguna hasta ahora. La forma más fácil para mí ha sido exponer los contadores de aplicaciones en un segmento de memoria compartida. Dada una estructura estándar de dichos contadores, es fácil para Linux recorrerlos externamente mirando en/dev/shm /. Exponerlos a través de/proc probablemente sería más agradable, siempre y cuando la aplicación no tenga que hacer syscalls para actualizarlos. – user964970

+1

Los contadores de rendimiento de Windows no son una función del kernel. Se implementan como una API con una biblioteca compartida de aplicaciones (.dll) que proporciona acceso a los contadores. Los contadores, a su vez, generalmente se implementan como objetos de memoria compartida expuestos por la aplicación. De esta manera, no cuestan casi nada actualizar, y hay una forma específica de aplicación para interpretarlos. No debería haber ninguna necesidad de integración/proc. Tal vez el visor Argus podría usarse para aplicaciones que no son Java (http://sourceforge.net/projects/argusjmx) en Linux, aunque la moneda de la especificación JMX no está clara. – Pekka

Respuesta

0

Además de @user964970 comentario/solución, sugiero que sea un agnóstico del sistema operativo.

Utilice una API independiente del sistema operativo, como ACE o BOOST, para crear su propia biblioteca, que proporcione un contador protegido con contraseña de semáforo con nombre, ubicado dentro de un segmento de memoria compartida con nombre.

Esto debería ser API de la biblioteca:

long * createCounter(const char * name); // Create a counter 
             // Will create a named semaphore and a named 
             // shared memory segment, holding the counter  
             // value. Will return pointer to counter 
long * getCounter(const char * name); // Get existing counter pointer 
             // in the calling process' address space 
long incCounter(const char * name); // increment existing counter 
Cuestiones relacionadas