Midiendo performance con Powershell

      No Comments on Midiendo performance con Powershell

Midiendo performance con Powershell

¿Como están tanto tiempo? Disculpen la demora, pero estuve armando un laboratorio que vamos a utilizar para los ejemplos que usemos en los artículos del blog.  De esa experiencia, voy a crear una serie de artículos para que puedan armar sus propios labs.

Mientras tanto, hoy vamos a crear una función que nos va a ayudar a medir la performance de CPU, RAM y Pagefile en uno o varios equipos. De paso, voy a tratar de arrojar un poco de luz sobre terminología confusa y conceptos básicos. Para lograr el propósito, vamos a utilizar a nuestro viejo y querido amigo WMI.

Parte esencial de nuestro trabajo en IT, es monitorear y diagnosticar problemas de performance en nuestros equipos. Cuando un recurso esta trabajando por sobre lo normal, queremos saber que proceso esta consumiendo dicho recurso o como podemos obtener la información precisa para hacer un diagnostico correcto.

En este caso vamos a armar una lista de procesos corriendo en el equipo y lo vamos a ordenar por uso de CPU, RAM o Pagefile según corresponda . Ademas, para cada caso, vamos a ofrecer un poco de información extra sobre la configuración del equipo relacionada a ese recurso. Esto nos va a dar un pantallazo general de lo que ocurre en el equipo, pero con un buen nivel de detalle.

Veamos por partes:

Aquí vamos a analizar un poco algunas cuestiones:

¿Porque utilizo -Query para trabajar con la clases WMI?

WMI nos da la posibilidad de usar WQL https://msdn.microsoft.com/en-us/library/aa394606(v=vs.85).aspx para filtrar y seleccionar directamente en el comando. Esto nos ahorra procesamiento. Pensemos que si pasamos la clase entera por el pipeline hacia Where-Object y luego lo filtrado hacia Select-Object, estaríamos trabajando con muchos objetos y perdiendo tiempo y procesamiento. Si, en cambio, podemos aplicar el filtro y la selección de las propiedades que nos interesan directamente en el comando, vamos a estar trabajando mas ágilmente y solo con lo necesario.

Elegimos mostrar la cantidad de CPU’s físicos y lógicos. Es necesario, porque mas adelante vamos a ver que la información por proceso nos puede confundir. También vamos a mostrar el porcentaje de uso total de todos los CPU para tener una idea de la performance en general del equipo

En el caso de Pagefile, son tantos los datos que queremos mostrar en pantalla, que conviene mostrar los valores en MB para que tantos números no resulten confusos a la vista. Por suerte las propiedades Initialsize, maximumsize, allocatedbasesize y currentusage ya están en MB.

Ahora si, armemos la tabla de procesos usando las opciones que elegimos con el switch

La pregunta aquí es ¿porque selecciono dos veces las mismas propiedades? Esto es debido a que WMI agrega algunas propiedades de por si. Nosotros nos deshacemos de esas propiedades de mas y nos quedamos solo con lo que elegimos. Por eso usamos el Select.
Una vez que elegimos las propiedades, pasamos a ordenar la información de acuerdo al recurso que elegimos. Aquí es donde usamos la propiedad que definimos en cada caso del switch. Mostramos esa columna de manera descendente (de mayor a menor)
Luego pasamos la información ordenada y decidimos cuantos procesos vamos a mostrar. Este valor lo obtenemos del parámetro -Top
Resta que mostremos la información en forma de tabla y que la ajustemos a pantalla

Veamos la funcion en acción y de paso aclaremos algunos conceptos y terminologías

CPU3

Aquí usamos el argumento CPU para el parámetro -Resource. También elegimos mostrar solo 15 de los procesos. Por default, al no elegir equipos, vamos a ver la información del equipo local.
Saquemos una pequeña cuenta: Tenemos 4 CPU’s, lo que hace que el total de los valores posibles de la columna PercentProcessorTime sea 400. En este caso sumamos los valores de la columna y nos da 121. Luego, 121 * 100 / 400 = 30,25%. Muy si sumamos algunos decimales, seguramente nos da el 33% que nos arroja “% Uso total CPU”.

ram

A medida que vamos entendiendo la información que obtenemos usando Powershell, vemos mas innecesario utilizar gráficos e imágenes. Sin embargo, si tienen que utilizar alguna herramienta GUI, al menos NO USEN Task Manager. Resource Monitor es una herramienta mas completa y precisa y viene por default desde Windows 2008 / Vista.  Aquí lo uso para que veamos que cuando medimos RAM, debemos prestar atención al WorkingSet

page

En este ejemplo, ejecutamos la función contra dos servers en producción (por eso tuve que distorsionar los nombres). El segundo server, como ven tiene dos pagefiles y la información se muestra correctamente.

¿Que me dicen si les aseguro que la columna PageFileBytes, no refleja el uso del Pagefile? Veamos otro ejemplo para demostrar que en realidad, lo que nos muestra PageFileBytes es el Commit Charge (la cantidad de memoria virtual http://www.winteltips.com/2016/05/22/memoria-virtual/ que reserva el OS para cada proceso)

Page2

Aquí vemos que la columna PageFileBytes es en realidad la columna Commit en Resource Monitor. De hecho, noten que el pagefile no esta siendo utilizado para nada en este equipo en este momento (Pagefile en uso = 0).

Hasta aquí la función get-processperf. Estoy seguro que se les va a ocurrir algunas propiedades e información para agregarle.

Espero que les sea de utilidad!

Saludos, Mauro.

 

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz